【字符串】z字形变换字符串

【字符串】z字形变换字符串

题目描述:

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:

L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。

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

string convert(string s, int numRows);
示例 1:

输入: s = “LEETCODEISHIRING”, numRows = 3
输出: “LCIRETOESIIGEDHN”

示例 2:

输入: s = “LEETCODEISHIRING”, numRows = 4
输出: “LDREOEIIECIHNTSG”
解释:
L D R
E O E I I
E C I H N
T S G

题目来源:Leetcode

思路:
string convert(string s, int numRows);
给出模拟z字形排列的行数numRows,所以构建numRows个string数组,每个string存储z字形排列后的每一行字符,整个过程需要设置向上向下标值位。

扫描二维码关注公众号,回复: 5307016 查看本文章
string convert(string s, int numRows) {
    if(numRows == 1) return s;
    int length = s.size() < numRows ? s.size():numRows;
    vector<string> newRows(length);
    /*设置一个向下、向上的flag位和一个向上向下的坐标位(num)表示哪一行*/
    bool turndown = false;
    int  num = 0;
    for(char c : s){
        newRows[num]+=c;
        if(num == 0 || num==numRows-1) turndown = !turndown;
        num += turndown? 1:-1; 
    }
    string ret;
    for(string row : newRows) ret+=row;
    return ret;

猜你喜欢

转载自blog.csdn.net/qq_34606546/article/details/87891184