leetcode 06 Z字形變換

leetcode 06
這道題有點找規律的意思,參考官方解答有兩種方法;

方法一:
一行一行的排下去,直到字符串結束;

class Solution {
public:
    string convert(string s, int numRows) {
    if(numRows==1)return s;                 //numRows爲1,可以直接返回
    int n=s.size(),cirlen=2*numRows-2;     //Z的兩個豎線之間距離
    string res;                                  
    for(int i=0;i<numRows;++i)             //按行排
    {
       for(int j=0;j+i<n;j+=cirlen)
       { 
           res+=s[i+j];                        //處理豎邊
           if(i!=0&&i!=numRows-1&&j+cirlen-i<n)
            res+=s[j+cirlen-i];                 //處理斜邊
       }
    }
        return res;
    }
};

方法二:
模擬Z的形成,從上往下再往上直到結束;

class Solution {
public:
    string convert(string s, int numRows) {

        if (numRows == 1) return s;
        vector<string> rows(min(numRows, int(s.size())));
        int curRow = 0;              //當前的行
        bool goingDown = false;     //向上還是向下

        for (char c : s) {
            rows[curRow] += c;
            if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
            curRow += goingDown ? 1 : -1;
        }
        string ret;
        for (string row : rows) ret += row;
        return ret;
    }
};

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