C语言 | Leetcode C语言题解之第6题Z字形变换

题目:

题解:

cpp 复制代码
char * convert(char * s, int numRows){
    int n = strlen(s), r = numRows;
    if (r == 1 || r >= n) {
        return s;
    }
    int t = r * 2 - 2;
    char * ans = (char *)malloc(sizeof(char) * (n + 1));
    int pos = 0;
    for (int i = 0; i < r; ++i) { // 枚举矩阵的行
        for (int j = 0; j + i < n; j += t) { // 枚举每个周期的起始下标
            ans[pos++] = s[j + i]; // 当前周期的第一个字符
            if (0 < i && i < r - 1 && j + t - i < n) {
                ans[pos++] = s[j + t - i]; // 当前周期的第二个字符
            }
        }
    }
    ans[pos] = '\0';
    return ans;
}
相关推荐
从零开始的嵌入式之旅42 分钟前
day32
linux·c语言·经验分享·笔记·嵌入式硬件
一条破秋裤1 小时前
C-数据类型
c语言·开发语言·chrome
xx~t1 小时前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
evans在进步3 小时前
LeetCode 189 轮转数组:三次反转为什么能实现右旋?
数据结构·算法·leetcode
Discipline~Hai4 小时前
Linux应用软件编程04-线程
linux·服务器·c语言·开发语言·linux应用软件编程
圣保罗的大教堂4 小时前
leetcode 3734. 大于目标字符串的最小字典序回文排列 困难
leetcode
LuminousCPP5 小时前
数据结构-二叉树(五):查找、销毁与前序序列建树
c语言·数据结构·笔记·二叉树
土司大王12 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展