Leetcode ZigZag Conversion解題報告

首先解釋一下題目意思,這個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;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章