C ++中的ZigZag转换

假设该字符串类似于“ IWANTTOLEARNCODE”。该字符串以之字形方式写在给定的行数n上。所以模式看起来像这样

一世

Ť

一种

Ø
w ^
ñ
Ø
Ë
[R
C
d
一种

大号

ñ

Ë

当我们读到这样的一行时-“ ITAOWNOERCDALNE”

因此,我们必须创建一个可以通过获取字符串和行数来执行这种操作的模块。

为了解决这个问题,我们将按照以下步骤

  • 当n = 1时,返回s

  • 创建大小为n的字符串数组arr

  • 行:= 0,向下:= true

  • 对于i,范围为0到字符串大小– 1

    • 在字符串arr [row]的末尾插入s [i]

    • 如果row = b – 1,则down:= false,否则,当row = 0时,down:= true

    • 如果down为true,则将行增加1,否则将行减少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"