既然是做题,首先一定是读懂题意,所以第一步,我来讲一下我对题目的理解:
首先给定了一个字符串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),接着是出现循环的次数,最后是判断循环之后剩余字符,最后就是通过算法解决排列问题了