C++ 中的 Z 字形转换
假设字符串类似于 "IWANTTOLEARNCODE"。此字符串以 Z 字形方式写入给定行数 n 上。因此,模式如下所示
I | T | A | O | |||
W | N | O | E | R | C | D |
A | L | N | E |
当我们像这样读取行时 - "ITAOWNOERCDALNE"
因此,我们必须创建一个模块,可以通过获取字符串和行数来执行此类操作。
为了解决这个问题,我们将遵循以下步骤
- 当 n = 1 时,返回 s
- 创建一个大小为 n 的字符串数组 arr
- row := 0,down := true
- 对于 i 范围从 0 到字符串大小 – 1
- 将 s[i] 插入到字符串 arr[row] 的末尾
- 如果 row = b – 1,则 down := false,否则当 row= 0 时,则 down := true
- 如果 down 为真,则将 row 增加 1,否则将 row 减小 1
- ans := 空字符串
- 对于 i 范围从 0 到 n – 1
- ans := ans + arr[i]
- 返回 ans
示例(C++)
让我们看看以下实现以更好地理解 -
#include <bits/stdc++.h> using namespace std; class Solution { public: string convert(string s, int numRows); }; string Solution::convert(string a, int b) { if(b == 1)return a; string arr[b]; int row = 0; bool down = true; for(int i = 0; i < a.size(); i++){ arr[row].push_back(a[i]); if(row == b - 1) down = false; else if(row == 0)down = true; if(down) row++; else row--; } string ans = ""; for(int i = 0; i < b; i++){ ans += arr[i]; } return ans; } main(){ Solution ob; cout << ob.convert("IWANTTOLEARNCODE", 3); }
输入
"IWANTTOLEARNCODE" 3
输出
"ITECWNTLANOEAORD"
广告