Leetcode 6. Zigzag Conversion

Zigzag Conversion

Zigzag Conversion

把一個字符串按照鋸齒型的方式去寫,按第一行往下,每行由左至右的順序得出一新字串回傳,題目還會給定一數numRows

  • 創造 numRows 個字串
  • 依照字串順序放入不同行的字串中,若是已經放到最後一行,接著便倒著放順序回去
    • 假設有 3 行,放的順序便是 1、2、3、2、1、2、3 …… 依此類推
class Solution:
    def convert(self, s: str, numRows: int) -> str:
         if numRows==1 or numRows>=len(s):   
             return s
        zigzag= = [''] * numRows      #給定一個長度numRows的array
        row,step=0,1          #row 從上到下的列 / step : 看是往上還往下

        for i in s:
            zigzag[row]+=i 
            if row==0:              #在第一列,最上列
                step+=1             #往下1個step,step+1
            elif row=numRows-1:     #在最後一列,最下列
                step-=1             #往上一列,step-1
            row+=step               #row隨著step變化
        
        return ''.join(zigzag)

C++

與python解同義

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows==1) return s;
        
        vector<string> v(numRows, "");
        int step = 1;
        int row = 0;
        
        for (char w: s) {
            if (row == 0) {                 //在第一列,最上列
                step = 1;                   //往下1個step,step+1
            }
            else if (row == numRows-1) {    //在最後一列,最下列
                step = -1;                  //往上一列,step-1
            }
            
            v[row] += (w);
            row += step;                    //row隨著step變化
        }
        
        string results;
        for (int i=0; i<v.size(); i++) {
            for (int n: v[i]) {
                results += n;
            }
        }
        
        return results;
    }
};