美文网首页
w1-T04 之6. Z 字形变换-中等

w1-T04 之6. Z 字形变换-中等

作者: 小院闲窗春已深 | 来源:发表于2020-05-04 09:33 被阅读0次

题目

image.png

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

注意:有可能字符串长度比所需要的numRows要短

解法1:利用StringBuilder
创建每一行的容器
遍历字符串每个字符char
——给每一行的容器添字符char
——遇到两边就转头
创建新容器目的是把它们变成一行
遍历每一行,前后拼接
返回新字符串

class Solution {
    public String convert(String s, int numRows) {
        if(numRows==1){
            return s;
        }
        //制造每一行row
        List<StringBuilder> rows = new ArrayList<>();
        for (int i =0 ; i<Math.min(numRows,s.length()); i++){
            rows.add(new StringBuilder());
        }
        //找位置插进去
        int curRow=0;
        boolean goingDown=false;
        for(char c:s.toCharArray()){
            //拿到每一行给后面接一个chars
            rows.get(curRow).append(c);
            //判断接下来走哪一行
            if(curRow==0||curRow==numRows-1){
                //只是在第一行和最后一行的时候做判断
                //也就是说相当于给了一个箭头方向牌指示
                //碰到两边看到方向牌的话就改变方向
                goingDown=!goingDown;
            }
            //语句判断更改行数
            //如果是ture的话就往下走,如果是false的话就往上走
            curRow+=goingDown?1:-1;
        }
        //整合每一row变成一行
        //创建新容器
        StringBuilder ret=new StringBuilder();
        for(StringBuilder row:rows){
            ret.append(row);//拼接在一起
        }
        return ret.toString();
    }
}

无注释代码块:

class Solution {
    public String convert(String s, int numRows) {
        if(numRows==1){
            return s;
        }
        List<StringBuilder> rows=new ArrayList<>();
        for(int i =0 ; i<Math.min(numRows,s.length());i++){
            rows.add(new StringBuilder());
        }
        int curRow=0;
        boolean goingDown=false;
        for(char c : s.toCharArray()){
            rows.get(curRow).append(c);
            if(curRow==0||curRow==numRows-1)goingDown=!goingDown;
            curRow+=goingDown?1:-1;
        }
        StringBuilder ret=new StringBuilder();
        for(StringBuilder row:rows){
            ret.append(row);
        }
        return ret.toString();
    }
}

相关知识:

List<StringBuilder> row=new ArrayList<>()

StringBuilder是一个可变的字符序列

row.add(new StringBuilder())

toCharArray() 方法将字符串转换为字符数组。

for (char c : s.toCharArray())

注意:StringBuilder当中是append,List当中是add


image.png

相关文章

  • w1-T04 之6. Z 字形变换-中等

    题目 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zig...

  • LeetCode-6 Z字形变换

    题目:6. Z字形变换 难度:中等 分类:字符串 解决方案:字符串遍历 今天我们学习第6题Z字形变换,这是一个字符...

  • 6. Z 字形变换 难度:中等

    题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输...

  • LeetCode 6. Z 字形变换(中等)

    将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEIS...

  • Python算法-模拟过程实现算法

    6. Z 字形变换[https://leetcode-cn.com/problems/zigzag-convers...

  • 【刷穿 LeetCode】6. Z 字形变换(中等)

    点击 这里[http://wechat.peterxx.com/qr_code_promote.html] 可以查...

  • 6. Z字形变换

    一、题目原型: 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:输入: s = "PAYPA...

  • 6. Z 字形变换

    题目描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 示例 解题思路1 顺序思维,先...

  • 6. Z字形变换

    难度:中等将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:P A H NA...

  • 6. Z 字形变换

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 ...

网友评论

      本文标题:w1-T04 之6. Z 字形变换-中等

      本文链接:https://www.haomeiwen.com/subject/jqfeghtx.html