【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();
    }
}
相关推荐
蓦然回首却已人去楼空13 小时前
画图专用文档
算法
洛水水13 小时前
【力扣100题】78.在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
江屿风13 小时前
C++图论基础拓扑排序算法流食般投喂
开发语言·c++·笔记·算法·排序算法
海棠AI实验室13 小时前
AI 时代文献综述:从检索到成稿的 RAG 五步法
windows·算法·自动化·llm·rag
H1785350909613 小时前
SolidWorks_基于草图的实体特征14_扫描扭转与控制
前端·人工智能·算法·3d建模·solidworks
黄金龙PLUS13 小时前
基于ARX结构的新型序列密码算法FlashLight
算法·网络安全·密码学·哈希算法·同态加密
洛水水14 小时前
【力扣100题】77.搜索二维矩阵
算法·leetcode·矩阵
仙俊红14 小时前
深入理解 ThreadLocal —— 从变量引用、强弱引用到 Spring Boot 实战
spring boot·python·算法
故渊at14 小时前
第五板块:Android 系统服务与电源管理 | 第十八篇:Battery Service 与 电量统计(Fuel Gauge)算法
android·算法·battery·电源·电池·电源管理·电量统计
The_Ticker14 小时前
港股量化实测:实时行情接口性能与数据质量深度解析
python·websocket·算法·金融