ZigZag Conversion

ZigZag Conversion

The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.
Subscribe to see which companies asked this question

求解思路

假设要将字符串拆分为n排,则创建n个字符串数组,按照“N”形排列字符串即可。假如说abcdefghijklmno排列成4排,形式如下:
a………..g………m
b……f…h……l…n
c…e……i…k……o
d………..j…………..

代码实现

std::string convert(std::string s, int numRows)
{
    if (numRows == 1)
        return s;
    std::vector<std::string> vStr(numRows,"");
    vStr.reserve(numRows);
    std::string medianRow("");
    int len = 0;
    int index = 0;
        while (len != s.size())
        {
            while (index <numRows&&len != s.size())
            {
                if (vStr[index] == "")
                    vStr[index++].push_back(s[len++]);
                else
                    vStr[index++] += s[len++];
            }
            --index;                    //index大小为vStr最大索引
            while(index>=1&&len!=s.size())
            {
                --index;
                vStr[index] += s[len++];            
            }
            ++index;            
        }
    std::string rslt("");
    for (int i = 0; i != vStr.size(); ++i)
    {
        if (i == numRows / 2)
        {
            rslt += medianRow;
            if(medianRow!="")
            std::cout << medianRow<<std::endl;
        }   
            rslt += vStr[i];
            std::cout << vStr[i] << std::endl;
    }
    return rslt;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值