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"

更新于: 2020-04-27

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告