算法:z字形排列

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
在这里插入图片描述

class Solution {
public:
    string convert(string s, int numRows) {
        string result="";
        //如果排序长度为1,或者字符的长度小于z字形长度,就直接输出s
        if(numRows==1||s.size()<=numRows)
            return s;
          //从第一行依次遍历到最后一行
        for(int rows=0;rows<numRows;rows++)
        {
        //first为直列所在的字符串位置
            int first=rows;
            //second为斜线所在列的字符串的位置
            int second=2*numRows-2-rows;
            //判断直列是否存在
            for(;first<s.size();)
            {
            //如果存在,就将first存在result中
                result+=s[first];
                //关键,判断是否斜列存在,行数为0或者为最后一行时不存在;并且判断位置是否大于字符串长度
                if(rows!=0&&rows!=numRows-1&&second<s.size())
                {
                    result+=s[second];
                }
               //下一个位置,每行一直一斜,依次下去
                first+=2*numRows-2;
                second+=2*numRows-2;
            }
        }
        return result;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值