LeetCode 6. ZigZag Conversion
Solution1:我的答案
总是因为各种各样的傻逼错误导致不能AC,脚踏实地很重要!
这个笨方法实在是有点慢。
class Solution {
public:
string convert(string s, int numRows) {
string res = "";
if (!s.size() || !numRows) return res;
if (numRows == 1) return s;
int str_len = s.size();
int cycle = str_len/(2*(numRows-1));//完整循环的个数,可能会有剩余
for (int i = 0; i < numRows; i++) { //行数
if (i == 0) {//处理第一行
int j = 0;
for (j = 0; j < cycle; j++) //完整循环内的处理
res += s[2*(numRows-1)*j];
//剩余部分处理
if (2*(numRows-1)*j < s.size())
res += s[2*(numRows-1)*j];
} else if (i > 0 && i < numRows - 1) { //第2至numRows-2行
int j = 0;
for (j = 0; j < cycle; j++) { //完整循环内的处理
res += s[2*(numRows-1)*j + i];
res += s[2*(numRows-1)*j + i + 2*(numRows-1) - 2*i];
}
//剩余部分处理
if (2*(numRows-1)*j + i < s.size())
res += s[2*(numRows-1)*j + i];
if (2*(numRows-1)*j + i + 2*(numRows-1) - 2*i < s.size())
res += s[2*(numRows-1)*j + i + 2*(numRows-1) - 2*i];
} else if (i == numRows - 1) { //第numRows-1行
int j = 0;
for (j = 0; j < cycle; j++) //完整循环内的处理
res += s[2*(numRows-1)*j + numRows - 1];
//剩余部分处理
if (2*(numRows-1)*j + numRows - 1 < s.size())
res += s[2*(numRows-1)*j + numRows - 1];
}
}
return res;
}
};
Solution2:参考答案
参考网址:http://www.cnblogs.com/grandyang/p/4128268.html
大佬真牛逼。。
代码真简洁!!
class Solution {
public:
string convert(string s, int nRows) {
if (nRows <= 1) return s;
string res = "";
int size = 2 * nRows - 2;
for (int i = 0; i < nRows; ++i) {
for (int j = i; j < s.size(); j += size) {
res += s[j];
int tmp = j + size - 2 * i;
if (i != 0 && i != nRows - 1 && tmp < s.size()) res += s[tmp];
}
}
return res;
}
};