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


#include <iostream>

#include <string>

#include <vector>

using namespace std;

int main()

{

    string s = "LEETCODEISHIRING";

    int numRows = 3;

    int rowFlag = -1;

    int count = 0;


    if (1 == numRows)

    {

        cout << s << endl;

        return 0;

    }


    vector<string> strOut(numRows);

    string strTmp;

    /* 按照行进行填充 */

    for (int i = 0; i < s.size(); i++)

    {

        strTmp = strOut[count];

        strTmp += s[i];

        strOut[count] = strTmp;

        //cout << strOut[count] << endl;

        if ((count == 0) || (count == numRows-1))

        {

            rowFlag = -rowFlag;

        }


        count += rowFlag;

    }


    /* 输出 */

    string str;

    for (int i = 0; i < numRows; i++)

    {

        str += strOut[i];

    }


    cout << str << endl;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETC...
    LeeYunFeng阅读 967评论 0 50
  • Z字形变换 将字符串"PAYPALISHIRING"以Z字形排列成给定的行数: P A H N A ...
    不爱去冒险的少年y阅读 442评论 0 0
  • 需求 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCOD...
    惑也阅读 342评论 0 1
  • 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEIS...
    1f872d1e3817阅读 253评论 0 0
  • 上学的时候我不知道什么叫无奈,现在认认真真体会到了。但是我们生来就是解决所有问题的,要么忙着活要么忙着死
    H希O望PE阅读 116评论 0 0