【LeetCode刷题-字符串】--6.N字形变换

6.N字形变换

方法:使用二维矩阵模拟

根据题意,当在矩阵中填写字符时,会向下填写r个字符,然后向右继续填写r - 2个字符,最后回到第一行,因此Z字形变换的周期是t = r + r - 2 = 2r - 2,是|/,每个周期占用矩阵上的 1+r - 2 = r - 1列。

因此有n/t个周期(最后一个周期视为完整周期),乘上每个周期的列数,得到矩阵的列数

注意在这里取了向上取整

创建一个r行c列的矩阵,遍历字符串s,按照Z字形编写

java 复制代码
class Solution {
    public String convert(String s, int numRows) {
        int n = s.length(), r = numRows; //行数
        if( r == 1 || r >= n){
            return s;
        }
        int t = r * 2 - 2;  //Z字形变换的周期|/  每个周期占用矩阵r-1列
        int c = (n + t - 1) / t * (r - 1);  //列数,这里取向上取整
        char[][] mat = new char[r][c];
        for(int i = 0,x = 0,y = 0;i<n;i++){
            mat[x][y] = s.charAt(i);
            if( i % t < r - 1){
                ++x;  //向下移动
            }else{
                --x;
                ++y;  //向右上移动
            }
        }
        StringBuffer ans = new StringBuffer();
        for(char[] row : mat){
            for(char ch:row){  //按行写入
                if(ch != 0){
                    ans.append(ch);
                }
            }
        }
        return ans.toString();
    }
}
相关推荐
Hcoco_me12 分钟前
大模型面试题75:讲解一下GRPO的数据回放
人工智能·深度学习·算法·机器学习·vllm
Xの哲學15 分钟前
Linux设备驱动模型深度解剖: 从设计哲学到实战演练
linux·服务器·网络·算法·边缘计算
明洞日记31 分钟前
【CUDA手册002】CUDA 基础执行模型:写出第一个正确的 Kernel
c++·图像处理·算法·ai·图形渲染·gpu·cuda
企业对冲系统官1 小时前
基差风险管理系统集成说明与接口规范
大数据·运维·python·算法·区块链·github
程序员-King.1 小时前
day134—快慢指针—环形链表(LeetCode-141)
算法·leetcode·链表·快慢指针
Swift社区1 小时前
LeetCode 376 摆动序列
算法·leetcode·职场和发展
高洁011 小时前
AIGC技术与进展(1)
深度学习·算法·机器学习·transformer·知识图谱
未来之窗软件服务1 小时前
计算机等级考试——二叉树考点和坑——东方仙盟
算法·二叉树·计算机软考·仙盟创梦ide·东方仙盟
张张努力变强2 小时前
C++类和对象(一):inline函数、nullptr、类的定义深度解析
开发语言·前端·jvm·数据结构·c++·算法
且去填词2 小时前
深入理解 GMP 模型:Go 高并发的基石
开发语言·后端·学习·算法·面试·golang·go