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".

模擬題,只要按照題目意思做就可以了,注意細節的處理,先從1到numRows -1行,然後從numRows-2行到0行,這樣處理,思路比較的明朗。

class Solution {
public:
    //純模擬題
    string convert(string s, int numRows) {
        int len = s.size();
        if(len < 1 || len <= numRows || numRows <= 1)
            return s;
        vector<string> rows(numRows, "");
        rows[0].push_back(s[0]);
        int i = 1;
        while(i < len)
        {
            //記錄1 - numRows-1 行
            for(int j = 1; i < len && j < numRows; ++j)
            {
                rows[j].push_back(s[i]);
                ++i;
            }
            
            for(int j = numRows - 2; i < len && j >= 0; --j)
            {
                rows[j].push_back(s[i]);
                ++i;
            }
        }
        
        string ans = rows[0];
        for(int i = 1; i < numRows; ++i)
            ans += rows[i];
        return ans;
    }
};


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