LeetCode 解題報(bào)告 - 6. ZigZag Conversion

對(duì) hard 類型的題,表示目前實(shí)在是 hold 不住,暫時(shí)先不刷啊。等我刷完 easy 和 medium 回頭再戰(zhàn)! 2016/10/10
編程語(yǔ)言是 Java,代碼托管在我的 GitHub 上,包括測(cè)試用例。歡迎各種批評(píng)指正!

<br />

題目 —— ZigZag Conversion

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of row like this: (You may want to display this pattern in a fixed font for better legibility)

P   A   H   N
A P L S I I G
Y   I   R

And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3)should return "PAHNAPLSIIGYIR".
<br >

解答

  • 題目大意
    給出一個(gè)字符串,給出行數(shù),按照這個(gè)行數(shù)將字符串寫成 zigzag 模式,然后按行讀出來(lái)。

  • 解題思路

    • 我們先來(lái)觀察一下這個(gè) zigzag 模式,我們發(fā)現(xiàn),是按照行讀的,所以每行都可以使用一個(gè) StringBuilder 來(lái)存儲(chǔ)。
    • 觀察列,每一個(gè)豎直的列都有 numRows 行,其他斜的列有 numRows-2 行,我們按照這個(gè)特點(diǎn)來(lái)填充 StringBuilder[] 數(shù)組即可。
  • 代碼實(shí)現(xiàn)

public class Solution {
    public String convert(String s, int numRows) {
        StringBuilder[] sb = new StringBuilder[numRows];
        for (int i = 0; i < numRows; i++) {
            sb[i] = new StringBuilder();
        }
        int i = 0;
        while (i < s.length()) {
            for (int rowIndex = 0; rowIndex < numRows && i < s.length(); rowIndex++) {
                sb[rowIndex].append(s.charAt(i++));
            }
            for (int rowIndex = numRows - 2; rowIndex > 0 && i < s.length(); rowIndex--) {
                sb[rowIndex].append(s.charAt(i++));
            }
        }
        for (i = 1; i < numRows; i++) {
            sb[0].append(sb[i]);
        }
        return sb[0].toString();
    }
}
  • 小結(jié)
    對(duì)于這種看似“花樣”的題目,剛上來(lái)可能是一臉懵逼,但仔細(xì)分析過(guò)后會(huì)發(fā)現(xiàn)排列規(guī)律,找準(zhǔn)數(shù)據(jù)結(jié)構(gòu)(本題中就是 StringBuilder 數(shù)組)即可迅速解決。另外,本題需要注意的是,對(duì)于 StringBuilder 數(shù)組,每一個(gè)元素(對(duì)象)都需要初始化。最后還需要將所有的 StringBuilder 連接起來(lái)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,776評(píng)論 0 33
  • 貪心算法 貪心算法總是作出在當(dāng)前看來(lái)最好的選擇。也就是說(shuō)貪心算法并不從整體最優(yōu)考慮,它所作出的選擇只是在某種意義上...
    fredal閱讀 9,284評(píng)論 3 52
  • 一、 1、請(qǐng)用Java寫一個(gè)冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨(dú)云閱讀 1,421評(píng)論 0 6
  • 每個(gè)基本類型封裝類都有將string轉(zhuǎn)換為基本數(shù)據(jù)類型的方法對(duì)于非常大的數(shù)字請(qǐng)使用Long,代碼如下* 將char...
    暖熊熊閱讀 1,816評(píng)論 0 3
  • 1、師父說(shuō) 一切的根是世界觀。世界觀影響人生觀、價(jià)值觀,產(chǎn)生教育觀,于是影響我們的教學(xué)觀。 我們這批人、這代人缺少...
    蔡毛閱讀 843評(píng)論 0 9