LeetCode 6 蛇形矩阵
题意
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
翻译
给定一个字符串,将它变成蛇形输出。这个蛇形的概念比较抽象,我们需要结合样例才能理解。
样例
分析
这题的题意有点鬼畜,意思是说将给定的字符串先按照蛇形排列好,然后再按行依次读入,最后输出新的字符串。
虽然LeetCode上给这题的难度是Medium,但实际上它还是比较简单的。
这题会告诉我们字符串以及行数,我们需要根据用到的行数,将字符串排成蛇形。
这个蛇形的排列也很简单,因为我们只要输出最后的按行连接的结果。所以我们完全可以忽略列的位置信息,只用关注摆放的行就好了。因为行数是有限的,对于每一行,我们可以用一个字符串记录当前行目前为止摆放的字符串,最后按照行的顺序将所有行的结果连接到一起就好了。通过观察,我们很容易发现,摆放的行是有周期规律的。一个周期是2 * rowJum - 2,从0先递增到rowNum - 1,再递减到1。
发现规律之后,再写出code就不难了。
上面的代码很简单,但是藏着一个可以优化的地方。
在于dict的使用,dict的查询需要开销。其实我们可以替换成数组,因为我们已经确定行数了,所以数组的长度是固定的。如此优化之后,时间效率会更高一点。但是差别不会很大,代码就不放了,我想大家应该都能想明白。
今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、在看、点赞)。
Last updated
Was this helpful?