我是把它看作是“W”型字,并且“V”作为一个处理循环
提交后错了两次:第一次内存预设不够大100变为1000
第二次没考虑边界情况,当输出行为1时,可以不用处理直接输出
1 class Solution { 2 public: 3 string convert(string s, int numRows) { 4 char ischar[1000][1000]={0}; 5 int cer_i=0; 6 int col=0,i=0; 7 string change; 8 if(numRows==1) return s; 9 while(i<s.length()) 10 { 11 12 while(cer_i<numRows && i<s.length()) 13 ischar[cer_i++][col]=s[i++]; 14 cer_i=cer_i-2; 15 while(cer_i>0 && i<s.length()) 16 ischar[cer_i--][++col]=s[i++]; 17 col++; 18 if(i>=s.length()) break; 19 } 20 for(int m=0;m<numRows;m++) 21 for(int n=0;n<col;n++) 22 { 23 if(ischar[m][n] !=0) change=change+ischar[m][n]; 24 } 25 return change; 26 } 27 };
124ms,是比较慢的
优化的话:可以把二维字符数组改为一维字符串数组,这样最后不用在循环重新获取一边。