Leetcode 6. ZigZag Conversion 题解
最后编辑于: 2016-03-31我的解
找规律,注意一些扰动情况即可。
16ms
class Solution {
public:
std::string convert(std::string s, int numRows) {
if(numRows == 1)
return s;
std::string res;
size_t margin = (numRows & 0x1) ? 4 * (numRows / 2):2 * numRows - 2;
for (size_t i = 0; i < numRows; ++i)
{
size_t j = i;
size_t step2 = 2 * j;
size_t step1 = margin - step2;
if (j < s.size())
res += s[j];
while (true)
{
if(!step1&&!step2)
break;
if(step1)
{
j += step1;
if (j >= s.size())
break;
res += s[j];
}
if(step2)
{
j += step2;
if (j >= s.size())
break;
res += s[j];
}
}
}
return res;
}
};
启发
此类题一是注意定义,比如这个 ZigZag
到底是怎么回事;二是小心扰动情况。