目录
6. Z 字形变换
解析
题解
38. 外观数列
解析
题解
6. Z 字形变换
6. Z 字形变换 - 力扣(LeetCode)
解析
题解
class Solution {
public:
string convert(string s, int numRows) {
// 42.专题六_模拟_N 字形变换_C++
// 处理边界情况
if (numRows == 1) return s;
string ret;
int n = s.size(), d = 2 * numRows - 2; // 公差
// 1.先处理第一行
for (int i = 0; i < n; i += d)
ret += s[i];
// 2.处理中间行
for (int k = 1; k < numRows - 1; k++) // 枚举每一行
{
for (int i = k, j = d - k; i < n || j < n; i += d, j += d)
{
if (i < n) ret += s[i];
if (j < n) ret += s[j];
}
}
// 3.处理最后一行
for (int i = numRows - 1; i < n; i += d)
ret += s[i];
return ret;
}
};
38. 外观数列
38. 外观数列 - 力扣(LeetCode)
解析
题解
class Solution {
public:
string countAndSay(int n) {
// 43.专题六_模拟_外观数列_C++
string ret = "1";
for (int i = 1; i < n; ++i) // 解释 n - 1 次即可
{
string tmp;
int len = ret.size();
for (int left = 0, right = 0; right < len; )
{
while (right < len && ret[left] == ret[right]) right++;
tmp += to_string(right - left) + ret[left];
left = right;
}
ret = tmp;
}
return ret;
}
};