leetcode 6 Z字形变换

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:

P     I    N
A   L S  I G
Y A   H R
P     I

0          8                 16     

1    7    9      15      17

2    6   10    14       18

3    5   11    13       19

4          12               20

numsRows=5

第一行和最后一行

数的增量为0

0    0+8=8      8+8=16

4    4+8=12   12+8=20

中间行

1    1+8-2=7    1+8=9     9+8-2=15   9+8=17

2    2+8-4=6      2+8=10  10+8-4=14  10+8=18

3    3+8-6=5    3+8=11   11+8-6=13   11+8=19

以此类推

class Solution {
public:
    string convert(string s, int numRows) {
        int length=s.length();
        string result;
        if(length==0||numRows==0||numRows==1) return s;
        int nodeLen=2*numRows-2;
        for (int i = 0; i < numRows; i++)         
        for (int j = i; j < length; j += nodeLen) 
        {                
            result += s[j];                
            if (i != 0 && i != numRows-1 && j - 2*i + nodeLen < length)                    
                result += s[j - 2*i + nodeLen];          
        }
        
        return result;
    }
};

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/qq_31442743/article/details/80845621
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞