首先解釋一下題目意思,這個ZigZag就是鋸齒形,之字形,舉個例子就可以明白
對於0~13當numRows=3時
0 4 8 12
1 3 5 7 9 11 13
2 6 10
當numRows=4的時候
0 6 12
1 5 7 11 13
2 4 8 10 14
3 9 15
這就是所謂的蛇皮走位,哈哈哈,然後可以看出它是有周期的,numRows = 3的時候,0~3是一個週期,numRows = 4的時候,0~5是一個週期
總體的想法是按照行,一行一行的append,除了第一行和最後一行,其他的行都會有多出來的數字,這個數字就是j+2*numRows-2*i,emmmm,其實就是找規律
最後的代碼如下,但是還有一個問題,之前用ans+=來添加字符,但是顯示超時,用push_back就不會超時,這是個問題,我還要去了解下他們的機制,這裏先留個坑。。。
class Solution {
public:
string convert(string s, int numRows) {
int len = s.length();
if(len==0||numRows<2)
return s;
string ans = "";
int size = 2*numRows-2;
for(int i = 0;i<numRows;i++)
for(int j = i;j<len;j+=size)
{
ans.push_back(s[j]);
if(i>0&&i<numRows-1)
{
int temp = j+size-2*i;
if(temp<len)
ans.push_back(s[temp]);
}
}
return ans;
}
};