【LeetCode笔记】6. Z字形变化(JAVA、思路)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】6. Z字形变化(JAVA、思路)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 解題 & 代碼
- 二維數組
- ArrayList && StringBuilder
題目描述
- 這題目有點搞,理解題意得時候直接結合給的例子比較好。
- 本質就是:從頂部開始,往下逐個走;到底了就反向,往上逐個走;以此類推直到結束。
- 上面的本質是只考慮了豎直方向的情況,至于水平方向,因為最終結果實際上只需要是按序的即可,對中間用于構成Z的空內容實際上不影響。
解題 & 代碼
二維數組
- 起初想到的方法,通過構造二維數組把整個Z字完全復現。
- 可以跑出結果,但是復雜度比較高O(n2n^2n2)
- 這里就不貼了= =,沒啥意義
ArrayList && StringBuilder
- 這里是參考了題解里Krahets的做法,感覺有很多可以學習的地方。
- numRows為1的情況,直接返回原串即可。
圖片引用自Krahets的題解
class Solution {public String convert(String s, int numRows) {if(numRows == 1){return s;}// 初始化鏈表 & 字符串List<StringBuilder> lsb = new ArrayList<>();for (int i = 0; i < numRows; i++) {lsb.add(new StringBuilder());}// flag是方向,可以反向。int i = 0, flag = -1;for(char c : s.toCharArray()){lsb.get(i).append(c);// 到頭了,需要改方向了if(i == 0 || i == numRows - 1){flag = -flag;}i += flag;}// 生成答案StringBuilder ans = new StringBuilder();for (int j = 0; j < numRows; j++) {ans.append(lsb.get(j));}return ans.toString();} }- 時間復雜度:O(n),相當于遍歷一次字符串
- 空間復雜度:O(n),每個字符占一個空間
總結
以上是生活随笔為你收集整理的【LeetCode笔记】6. Z字形变化(JAVA、思路)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode笔记】238. 除自身
- 下一篇: 新松机器人发行价_知识创造财富,“机器人