美文网首页
leetcode 6 Z 字形变换

leetcode 6 Z 字形变换

作者: justonemoretry | 来源:发表于2019-11-19 22:58 被阅读0次

这个题的关键在于控制到达行0或者行的最大值时往回走的问题,有点像个铁道兵,走到路的尽头就返回。

自己的解法,使用string数组,string在频繁变化时效率比较低,不过整体还可以:

class Solution {

    public String convert(String s, int numRows) {

        if (numRows == 1) {

            return s;

        }

        String[] levelString = new String[numRows];

        Arrays.fill(levelString, "");

        int forward = 1;

        int row = 0;

        for (int i = 0; i < s.length(); i++) {

            levelString[row] += s.charAt(i);    

            if (row == numRows - 1) {

                forward = -1;        

            }

            if (row == 0) {

                forward = 1;    

            }

            row += forward;                                         

        }

        String res = "";

        for (int j = 0; j < numRows; j++) {

            res += levelString[j];                

        }

        return res;                

    }

}

官方解法,使用StringBuilder,整体效率会更高,这个转向直接用!也更巧妙:

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();

    }

}

相关文章

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

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

  • LeetCode[6] - Z字形变换

    题目 将字符串 "PAYPALISHIRING"以Z字形排列成给定的行数: 之后从左往右,逐行读取字符:"PAHN...

  • [LeetCode]6、Z字形变换

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

  • Leetcode 6 Z字形变换

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

  • leetcode 6 Z 字形变换

    这个题的关键在于控制到达行0或者行的最大值时往回走的问题,有点像个铁道兵,走到路的尽头就返回。 自己的解法,使用s...

  • LeetCode 6 Z字形变换

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

  • Leetcode 6 Z字形变换

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

  • leetcode 6 - Z 字形变换

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

  • Python小白 Leetcode刷题历程 No.6-No

    Python小白 Leetcode刷题历程 No.6-No.10 Z 字形变换、整数反转、字符串转换整...

  • LeetCode6.Z字形变换 JavaScript

    LeetCode6.Z字形变换 JavaScript 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z...

网友评论

      本文标题:leetcode 6 Z 字形变换

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