Leetcode0006Z 字形变换C++解法

题目描述

在这里插入图片描述
在这里插入图片描述
思路解析
看到这道题其实一开始我是一脸懵的
后面才慢慢清楚思路

  • 没有用数组以及其他工具,依次找到第一行、第2行…第n行所取S中的字符,存入ans中,返回ans即可。

  • 找到下标分布的规律:

  • 第一行和最后一行取出字符串S的下标间隔为(numRows*2-2),因为中间有(numRows-1)行,而每行中有2个数字;

  • 中间的每一行间隔有下三角部分和上三角部分,间隔分别为(numRows-row-1) * 2、row * 2;

题解

class Solution {
public:
    string convert(string s, int numRows) {  
        int length=s.length();
        if(numRows>=length||numRows<2) return s;
        string ans;
        for( int row=0;row<numRows;row++){
            int i=row;
            if(row==0||row==numRows-1){
                while(i<length){
                    ans+=s[i];
                    i+=numRows*2-2;
                }
            }
            else{
                while(i<length){
                 ans+=s[i];
                 i+=(numRows-row-1)*2;
                    if(i<length){
                        ans+=s[i];
                        i+=row*2;
                    }
                }
            }
        }
        return ans;     
    }
};

提交结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值