LeetCode第6题N 字形变换

简介: 该文章介绍了 LeetCode 第 6 题 N 字形变换的解法,通过按列生成的方式,根据行数转换逻辑来构造字符串,主要注意控制行数的转换时机,从而实现 N 字形变换。

继续打卡算法题,今天学习的是第LeetCode的第6题N字形变换,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码能力有一些帮助。

image.png

分析一波题目

给定一个字符串,需要将它按照指定的行数生成一个N字形的排列,这个题目也有技巧,如果我们想按一行一行生成会非常麻烦,但是按照一列一列生成就非常容易理解,并且代码也比较容易理解。

比如PAYPALISHIRING,指定行数是3。

第一列 从0行开始,构造第一列的

P
A
Y

第二列 这里需要注意,第一列到到最后一个了,根据n字的特性,第二列需要行数转换

P

第3列 这里又从0行开始了,构造第3列的数据

A
L
I

编码解决

class Solution {
   
   
    public String convert(String s, int numRows) {
   
   
            if(numRows < 2) return s;
        //记录每一行的字符串    
        List<StringBuilder> rows = new ArrayList<StringBuilder>();
        for(int i = 0; i < numRows; i++) rows.add(new StringBuilder());
        //i控制行数
        int i = 0, flag = -1;
        for(char c : s.toCharArray()) {
   
   
            rows.get(i).append(c);
            //到达了最大行或者最小行,需要转换行数了 
            if(i == 0 || i == numRows -1) flag = - flag;
            i += flag;
        }
        StringBuilder res = new StringBuilder();
        for(StringBuilder row : rows) res.append(row);
        return res.toString();
    }
}

总结

这个题目是按照模拟的做法,主要是注意控制行数的转换逻辑,什么时候行要从0行开始,什么时候行数要往0行靠近。

相关文章
|
10月前
|
安全
WordPress好用的TinyMCE编辑器插件
果果TinyMCE编辑器基于TinyMCE深度开发,支持高级排版、表格、代码块、图片上传等功能,提升内容创作流畅度与专业性。功能包括兼容TinyMCE所有特性、支持文章与页面编辑、自定义配置、安全图片上传及媒体库支持。仅替换后台编辑器,不影响前台及其他页面。
303 0
|
API 云栖大会
通义千问升级旗舰模型Qwen-Max,性能接近GPT-4o
通义旗舰模型Qwen-Max全方位升级,性能接近GPT-4o
10616 12
|
机器学习/深度学习 人工智能 图形学
I2V3D:微软+港城大黑科技!单图秒变3D动态视频,相机轨迹自由操控
I2V3D 是由香港城市大学和微软联合开发的图像到视频生成框架,支持将静态图像转换为动态视频,基于3D几何引导实现精确的动画控制,适用于动画制作、视频编辑和内容创作等领域。
540 3
I2V3D:微软+港城大黑科技!单图秒变3D动态视频,相机轨迹自由操控
|
机器学习/深度学习 Kubernetes 算法框架/工具
ONNX 与容器化:实现端到端的 ML 管道自动化
【8月更文第27天】在现代机器学习 (ML) 工作流程中,模型的训练、转换、部署和管理通常涉及多个步骤和技术栈。Open Neural Network Exchange (ONNX) 提供了一种统一的方式来表示和交换机器学习模型,而容器化技术(如 Docker 和 Kubernetes)则为部署和管理这些模型提供了灵活且可扩展的方式。本文将探讨如何结合 ONNX 和容器化技术来构建端到端的 ML 管道自动化系统。
524 1
|
前端开发
【专栏:CSS基础篇】CSS盒模型:理解网页布局的核心
【4月更文挑战第30天】CSS盒模型是网页布局关键,将HTML元素视为内容、内边距、边框和外边距的矩形。内容决定元素大小,padding增加内部空间,border设置线条样式,margin控制元素间距。理解盒模型及其计算方式(内容+padding+border+margin)有助于布局设计。通过调整相关属性,实现浮动、Flexbox或定位布局,创建响应式网页。
301 0
|
Python
python移动文件到另一个文件夹
python移动文件到另一个文件夹
253 0
|
Oracle JavaScript 前端开发
Java面试30天计划Day01(JRE/JDK/JVM三者关系...)
Java语言的特点?JVM与JRE和JDK三者之间何关系?字节码是什么?Java是编译型还是解释型语言?为什么说是半编译/编译与解释共存? Java和C++有什么不同?Oracle JDK 与 Open JDK相比有什么不同?
305 0
Java面试30天计划Day01(JRE/JDK/JVM三者关系...)