題目

給予一個字串,將其排成Z形狀之後,再重新輸出模樣。
有點難以用文字形容,可能需要看過題目才會知道到底是怎麼一回事。

解題方法

這題其實實作起來不會太困難,主要是尋找到規律。如果發現其中的要點,就非常容易。
但因為我本身屬於偏笨那類型,也是上網查詢別人的題目解說,發現其規律所在。
要點就在於,把轉乘成Z字型的字元位置寫出來就可以發現其中的奧妙,題目解起來就變十分輕鬆。

像是題目給予的”PAYPALISHIRING”轉出來變成”PAHNAPLSIIGYIR”,那就將題目這樣轉變

0   6    12
1 5 7 11 13
2 4 8 10 14
3   9      

第一行相差:6
第二行是:4 2 4 2 相間隔,但加起來也為6
第三行是:2 4 2 4
第四行是:6

就發現有規律去解題!!!

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 1)
return s;
string ans;

int a = (numRows*2) - 2;

for(int i=0;i<numRows;++i)
{
bool flag = false;
for(int j=i;j<s.length();flag = flag?false:true)
{
ans+=s[j];
if(i == 0 || i == numRows-1)
j+=a;
else if(flag)
j+=i*2;
else
j+=(a-(i*2));
}
}

return ans;
}
};