第一次写博客,开始练习LeetCode
这道题是“N”型排列,输入字符为s:0 1 2 3 4 5 6 7 8 9 f g h j k l,再输入numRows,是行数,比如numRows=5经过convert之后变为
0 8
1 7 9
2 6 f l
3 5 g k
4 h
最后输入的结果是0 4 8 1 3 5 7 9 2 6;
第一行和最后一行每个字符位数相差n=2*numRows-2个。
其他行之间第奇数列和偶数列相差(n-2*列数)位,偶数位和奇数位相差(2*列数)位
最后我忘了当numRows=1和numRows比字符串长度大的时候的情况了,所以爆出超时的情况!!
新手请多指教
class Solution{
public:string convert(string s,int numRows){
int length = s.length();
int n;
string solu="";
n=2*numRows-2;
if(numRows>=length||numRows==1){
return s;
}
else{
for(int i=0;i<numRows;i++){
if(i==0||i==numRows-1){//第一行最后一行
for(int j=i;j<length;j+=n)
solu+=s[j];
}
else{//其他行
int k=2*i;
for(int j=i;j<length;j+=k){
solu+=s[j];
k=n-k;
}
}
}
return solu;
}
}
};
int main(){
Solution way;
string s;
int numRows;
cout<<"请输入字符串"<<endl;
cin>>s;
cout<<"请输入数字";
cin>>numRows;
cout<<way.convert(s,numRows);
system("pause");
return 0;
}