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;
}
相关推荐
代码改善世界28 分钟前
【C语言】线性表之顺序表、单链表、双向链表详解及实现
c语言·网络·链表
m0_531237173 小时前
C语言-分支与循环语句练习2
c语言·开发语言·算法
Once_day3 小时前
GCC编译(3)常见编译选项
c语言·c++·编译和链接
爱编码的小八嘎3 小时前
第3章 Windows运行机理-3.1 内核分析(3)
c语言
Tisfy4 小时前
LeetCode 1523.在区间范围内统计奇数数目:两种方法O(1)算
算法·leetcode·题解
祈安_4 小时前
深入理解指针(三)
c语言·后端
m0_531237174 小时前
C语言-函数练习2
c语言·开发语言
fly的fly4 小时前
RT-Thread消息队列源码机制讲解
c语言·stm32·物联网
小付同学呀4 小时前
C语言学习(四)——C语言变量、常量
c语言·开发语言
艾莉丝努力练剑5 小时前
【Linux:文件】进程间通信
linux·运维·服务器·c语言·网络·c++·人工智能