把一個字符串按照鋸齒型的方式去寫,按第一行往下,每行由左至右的順序得出一新字串回傳,題目還會給定一數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;
}
};