您的位置:首页 > 其它

[LeetCode]ZigZag Conversion

2013-06-03 09:09 239 查看
class Solution {
//be careful with the special case
//when done with coding, figure out some cases (including illegal, normal, edge cases)
//to run with this solution, this will help to get a bug-free solution
public:
string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<char>> zig(nRows, vector<char>());
int zigRow = 0;
int sign = 1;
for (int i = 0; i < s.size(); ++i)
{
zig[zigRow].push_back(s[i]);
if (nRows == 1)//special case
zigRow = 0;
else
{
if(zigRow == nRows-1) sign = -1;
if(zigRow == 0) sign = 1;
zigRow += sign;
}

}
string ans;
for (int i = 0; i < zig.size(); ++i)
{
for (int j = 0; j < zig[i].size(); ++j)
{
ans.push_back(zig[i][j]);
}
}
return ans;
}
};

second time

class Solution {
public:
string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(nRows == 1) return s;

string result;
for(int i = 0; i < nRows; ++i)
{
int curOriginalIdx = i;
int k = 0;
while(curOriginalIdx < s.size())
{
int nextOriginalIdx;
if(k%2 == 0) nextOriginalIdx = curOriginalIdx+2*(nRows-1-i);
else nextOriginalIdx = curOriginalIdx+2*(i);
if(nextOriginalIdx != curOriginalIdx)
result.push_back(s[curOriginalIdx]);
curOriginalIdx = nextOriginalIdx;
k++;
}
}

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: