很蠢的解法:申请一个1000*1000的数组,先把字符串排列好,然后按行遍历数组,如果此处不为空就添加到ans。其中因为不确定列要遍历到多少为止试了很多都不行,就直接暴力设为1000了,代码中可以看到我的注释。
class Solution {
public:
string convert(string s, int numRows) {
if(numRows==1) return s;
char a[1000][1000];
int len=s.length();
int cnt=0;
int x,y;
memset(a,0,sizeof(a));
if(len>0) {
a[x=0][y=0]=s[0];
cnt=1;
// x=1;
}
int ok=0;
while(1){
for(int i=0;i<numRows-1;i++){
if(cnt>=len){
ok=1;
break;
}
a[++x][y]=s[cnt++];
}
// y++;
// x--;
for(int i=0;i<numRows-1;i++){
if(cnt>=len){
ok=1;
break;
}
a[--x][++y]=s[cnt++];
}
if(ok) break;
}
// for(int i=0;i<10;i++){
// for(int j=0;j<10;j++) cout<<a[i][j];
// cout<<endl;
// }
string ans;
// int tmp=len/numRows+numRows>numRows?len/numRows+numRows:numRows;
// cout<<len/numRows<<" "<<numRows<<endl;
int tmp=1000;
for(int i=0;i<numRows;i++){
for(int j=0;j<tmp;j++){
if(a[i][j]!=0)// break;
ans+=a[i][j];
}
}
// cout<<ans.length()<<endl;
return ans;
}
};