从现在开始要一天一道leetcode了,不然感觉根本做不完的样子,说说最近做这几道题的感受吧,其实我真的是从小白开始做起的,刚开始的第一题都要看着答案做,然后慢慢地开始学会独立思考思考应该怎么解决问题,虽然还没有达到自己编写代码的能力,但是我已经开始学会独立思考了,这是我进步的地方,我希望通过算法的逐渐练习来提高我的编程能力。
下面是第六题的解答:
我在网上看题目分析的时候,发现了一个有意思的事情,就是数组的下标是一个很有用的东西,分析题目的时候可以用单纯的数字来模拟我需要打印字符的顺序。
注意到除了第一行和最后一行之外,标号的间隔还有两种情况交替出现,这时就需要分奇数列和偶数列分别进行讨论。代码:
class Solution{
public:
string convert(string s, int numRows){
if(numRows < 2)
return s;
string ans = "";
int len = s.size();
int idx = 0;
// Process the first line
while(idx < len){
ans = ans + s[idx];
idx = idx + (numRows-1)*2;
}
// Process 2-numRows line
for(int i = 1; i < numRows - 1; i++){
//flag:Distinguish the odd and the even column
bool flag = false;
idx = i;
if(idx >= len)
break;
ans += s[i];
while(idx <= len){
if(!flag){ //even column
idx = idx + (numRows - i - 1)*2;
if(idx < len)
ans += s[idx];
flag = true;
}
else{ //odd column
idx = idx + i*2;
if(idx < len)
ans += s[idx];
flag = false;
}
}
}
// Process the last line
idx = numRows - 1;
while(idx < len){
ans = ans + s[idx];
idx = idx + (numRows - 1)*2;
}
return ans;
}
};
坚持就是胜利!