leetcode 6. Z 字形變換

將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。
比如輸入字符串爲 LEETCODEISHIRING 行數爲 3 時,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

之後,你的輸出需要從左往右逐行讀取,產生出一個新的字符串,比如:LCIRETOESIIGEDHN
請你實現這個將字符串進行指定行數變換的函數:

string convert(string s, int numRows);

示例 1:

輸入: s = "LEETCODEISHIRING", numRows = 3
輸出: "LCIRETOESIIGEDHN"

示例 2:

輸入: s = "LEETCODEISHIRING", numRows = 4
輸出: "LDREOEIIECIHNTSG"
解釋:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

pyai
簡單解析:找規律題,遍歷第ii行,設置一個遊標初始爲ii,奇數次時加(numRows1i)×2(numRows-1-i)\times2,偶數次時加i×2i\times2,畫個圖就很明顯可以看出來了。

class Solution {
public:
    string convert(string s, int numRows) {
        string ans = "";
        int len = s.length();
        if(numRows == 1) return s;
        for(int i = 0; i < numRows; i++){
            int cur = i, tag = 1, last = -1;
            while(cur < len) {
                if(cur != last)
                    ans += s[cur];
                last = cur;
                if(tag) cur += (numRows - 1 - i) * 2;
                else cur += (i) * 2;
                tag = !tag;
            }
        }
        return ans;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章