# 6 - ZigZag Conversion

一開始會想要直接找到某個規則來決定每個 index 要落在回傳字串的哪個 index,但規則超級複雜,根本很難直接寫。還是先把各個 row 的字串乖乖弄出來,最後再兜起來比較方便。

解法一 - 先把各個 row 的 string 都弄出來,最後再接起來

這個解法算是很直覺,用一個 increase 來控制現在的字母要被丟到哪個 row,每次遇到該轉方向的時候就改 increase 的正負號:

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1) return s;

        vector<string> res(numRows);
        int row=0, increase=-1;
        for(int i=0; i<s.size(); ++i){
            // every time at turning point, we change the increase direction
            if(i%(numRows-1)==0) increase *= -1;
            res[row].push_back(s[i]);
            row += increase;
        }

        string ret;
        for(auto str:res){
            ret += str;
        }
        return ret;
    }
};

Last updated