每日一练:z字形变化

在这里插入图片描述

既然是做题,首先一定是读懂题意,所以第一步,我来讲一下我对题目的理解:

首先给定了一个字符串s,也就是对应即将输入的字符串;给定了行数numrows(这个是题目的关键,一定要理解),对应的是你输入字符串输入呈现的z字形长度

当numrows=3时:
在这里插入图片描述
我们可以很清楚的看到字符串PAYPALISHIRING,以长度为3的形式展开
形式为:
在这里插入图片描述
在这里插入图片描述

通过上面的箭头,可以看到该字符以竖形的z字以此展开
其对应的假设把这个看作一个坐标(图比较丑),以第一个数为为原点,可以得到所有点坐标,(0,0)(0,1)(0,2)(1,1)(2,0)(2,1)(2,2)(3,1)以此类推
在这里插入图片描述
当numrows=4时:
在这里插入图片描述
我们可以很清楚的看到字符串PAYPALISHIRING,以长度为4的形式展开
在这里插入图片描述
在这里插入图片描述
同理也可以以坐标形式来理解

接下来就是解题思路了,因为是选择题所以当然首选排除法

通过这个 if (numRows == 1)这个判断语句就能筛出两个错误选项,当numrows等于1时,直接时输出一串字符,并没有z字形,所以直接返回字符串,若numrows大于1则会出现z字形,就不能返回字符串。然后后面看两个选项我发现ac两个选项一模一样,再读了一下代码,发现没有什么问题就选了其中一个。
首先就是判断numrows是否大于1,其次就是大于1后,字符串是否满足循环条件(也就是说字符串长度是否大于numrows长度,不大于就返回字符串,大于就有机会出现z字形),其次是多少个字符会出现循环(当numrows=3,需要4个字符才能出现循环,当numrows=4,需要6个字符,因此是2*numrows-2),接着是出现循环的次数,最后是判断循环之后剩余字符,最后就是通过算法解决排列问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值