将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zigzag-conversion
1.用二维数组去把字符串S按照“Z”字型排列后,再用一个新的字符串将二维数组中的内容串成一串儿。
2.如何把S按照“Z”字型排列?
2.1先确定二维矩阵的shape:
行数就是形参r;
列数:“Z”的排列有一定的周期性,周期为
一个周期占有的列数为1+r-2=r-1
所以,字符串的占有的列数为t*(r-1)
2.2 排列
设当前填写的位置为 (x,y),初始 (x,y)=(0,0)若当前字符下标 i,i 满足,则向下移动,否则向右上移动。
3.代码class Solution {
public:
string convert(string s, int numRows) {
int n=s.length();
if(numRows==1 || n chars(numRows, string(c, 0));
int x=0,y=0;
for(int i=0;i



