【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();
    }
}
相关推荐
徐小夕6 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
Robert--cao6 小时前
移动底盘与机械臂联合规划:开源算法与工程实现
算法
小豆庄7 小时前
Mac 上给视频人脸打码:本地工具的依赖、追踪与推理管线
算法·视觉检测·视频·敏捷流程·纹理贴图
星夜离尘567 小时前
MATLAB 工程实验:从相邻块均值手写重叠 Allan 偏差,数清有效项
算法·matlab·均值算法
y1su9 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan10 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
其实防守也摸鱼10 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
蓝悦无人机11 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划
RaaS10011 小时前
Agent Skills 进了 Linux Foundation:2.8 亿次安装,但装 skill 还没有安全规范
人工智能·算法·架构
CV爱数码11 小时前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct