leetcode006 ZigZag Conversion

題目

6. ZigZag Conversion
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows 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”.

思路

這題沒有難度,關鍵在於弄懂題意然後找到字母變換的規律,題目意思是把字母變換成鋸齒狀,形如:|/|/|/| 。第一行和最後一行的比較好找2 * numRows - 2,中間的就需要好好思考一下了。首先,還是有2 * numRows - 2這一樣的的字母存在,只是中間比這多了一部分如題目中的P,S…,這裏的規律是:在前一個字母的位置上+(2 * numRows - 2) - 2 * i

提交代碼:

public String convert(String s, int numRows)
{
    int length = s.length();
    if(length <= 2 || numRows <= 1)
        return s;

    char[] s_char = s.toCharArray();
    StringBuilder stringBuilder = new StringBuilder();
    int flag = 2 * numRows - 2;
    for(int i = 0; i < numRows; i++)
    {
        for(int j = i; j < length; j += flag)
        {
            stringBuilder.append(s_char[j]);
            if(i > 0 && i < numRows - 1)
            {
                int tmp = j + flag -  2*i;
                if(tmp < length) stringBuilder.append(s_char[tmp]);
            }
        }
    }
    return stringBuilder.toString();
}

結果細節(圖):

image

總結:

  1. 在JAVA中要操作String中的單個字符時,先把它變成字符數組。
  2. 在JAVA中要拼接一個String時,用StringBuilder或字符數組效率較高(千萬不要用string+string這種形式!!!)
發佈了44 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章