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行靠近。

相关文章
|
4月前
|
算法
LeetCode算法题---最长回文子串、N 字形变换(四)
LeetCode算法题---最长回文子串、N 字形变换(四)
36 0
|
存储
LeetCode6-Z字形变换
LeetCode6-Z字形变换
|
20天前
|
Python
python实现:旋转矩阵转换为四元数
python实现:旋转矩阵转换为四元数
27 0
|
3月前
|
算法 索引 Perl
力扣经典150题第二十二题:Z 字形变换
力扣经典150题第二十二题:Z 字形变换
23 1
|
3月前
|
Perl
6.Z 字型变换
6.Z 字型变换
|
4月前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
35 1
|
4月前
leetcode-6:Z 字形变换
leetcode-6:Z 字形变换
38 0
|
4月前
|
C++
字形变换(C++)
字形变换(C++)
27 0
|
4月前
|
移动开发 算法 C#
Leetcode算法系列| 6. Z 字形变换
Leetcode算法系列| 6. Z 字形变换