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;
}
相关推荐
小魏每天都学习9 分钟前
【算法——c/c++]
c语言·c++·算法
智码未来学堂43 分钟前
探秘 C 语言算法之枚举:解锁解题新思路
c语言·数据结构·算法
彷徨而立3 小时前
【C/C++】strerror、GetLastError 和 errno 的含义和区别?
c语言·c++
代码无bug抓狂人4 小时前
动态规划(附带入门例题)
c语言·算法·动态规划
恶魔泡泡糖5 小时前
51单片机串口通信
c语言·单片机·嵌入式硬件·51单片机
知无不研6 小时前
c语言动态内存规划
c语言·动态内存管理·内存泄露·基础知识·malloc·realloc·calloc
圣保罗的大教堂6 小时前
leetcode 3650. 边反转的最小路径总成本 中等
leetcode
3108748766 小时前
0005.C/C++学习笔记5
c语言·c++·学习
历程里程碑7 小时前
Linxu14 进程一
linux·c语言·开发语言·数据结构·c++·笔记·算法
木井巳8 小时前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝