【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();
    }
}
相关推荐
BAGAE12 小时前
FEC-RS前向纠错编码理论及工程实施研究
c语言·c++·qt·算法·决策树·链表
兰令水12 小时前
leecodecode【状态机DP】【2026.6.9打卡-java版本】
java·开发语言·算法
8Qi812 小时前
LeetCode 5:最长回文子串(Longest Palindromic Substring)—— 题解
算法·leetcode·职场和发展·动态规划
j7~12 小时前
【算法】专题一:双指针之移动零,复写零,快乐数
数据结构·c++·算法·双指针·快乐数·移动零·复写零
lqqjuly12 小时前
KAN 网络深度解析
算法
阿里matlab建模师12 小时前
【机场停机位分配】matlab实现基于遗传算法的机场停机位分配优化研究
开发语言·算法·数学建模·matlab·全国大学生数学建模竞赛
小雨下雨的雨18 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.21 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*21 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬1 天前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵