将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列
输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
思路:一开始想的是当行数=4时,输出和输入之间的间隔字母数字为5,3,1(比如解释中的L和D间隔了5个字母,第二行E和O间隔为3,)只需要按照规律放到一个空的数组里就能完成(事实证明是我想太简单了)。
转换思路:将每个字母标号,从0到numRows*2-2,例如解释中L,E,E,T,C,O标号为0-5,D标号为0,以此类推。之后取新标注好的元素下标,按这个顺序依次插入到空数组里即可。
代码:
class Solution: def convert(self, s: str, numRows: int) -> str: if numRows == 1: return s result = ['']*numRows r = numRows*2 - 2 for i in range(len(s)): if i%r <= r - i%r: t = i%r else: t = r - i%r result[t] += s[i] return (''.join(result)) # join():连接字符串数组,前面的''用这种方法可以去掉
解题时遇到的问题:一开始没有考虑在第一轮时,余数会大于行数,因此出现了错误,于是加上了一个if的判断完成。最后输出的时候没有用上join()函数,最后的结果就会变成分开的字符串。就像这样
题目来自LeetCode第6题