题目描述
C++解法
class Solution {
public:
string convert(string s, int numRows) {
vector<string> temp(numRows);
string res;
if(s.empty()||numRows<1) return res;
if(numRows==1) return s;
for(int i=0;i<s.size();i++){
int ans=i/(numRows-1);
int cur=i%(numRows-1);
if(ans%2==0){
temp[cur].push_back(s[i]);
}
if(ans%2!=0){
temp[numRows-cur-1].push_back(s[i]);
}
}
for(int i=0;i<temp.size();i++){
res+=temp[i];
}
return res;
}
};
python3解法
class Solution:
def convert(self,s:str,numRows:int)->int:
n=len(s)
result=''
if(n<=numRows or numRows==1):
return s
for k in range(numRows):
result+=s[k]
max=2*(numRows-1)-2*k
min=2*k
while k<n:
k+=max
if max>0 and k<n:
result+=s[k]
k+=min
if min>0 and k<n:
result+=s[k]
return result
JavaScript解法
var convert = function (s, numRows) {
if (numRows < 2) return s; //不需要折返的情形
let r = Array(numRows).fill(""), //初始化numRows个字串
c = (numRows - 1) * 2; //Z字单个循环长度
//按z字折返规律把每个字符组装到对应的行里
s.split("").forEach((l, i) => r[i % c < numRows ? i % c : c - i % c] += l);
//拼合所有行
return r.join("");
};