学习目标:
每日一题-Z 字形变换学习内容:
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
解题思路:
标签:字符串
整体的思路是遍历字符串,遍历过程中将每行都看成新的字符串构成字符串数组,最后再将该数组拼接起来即可
如果 numRows=1numRows=1 则说明当前字符串即为结果,直接返回
否则整个字符串需要经历,向下向右,向下向右,这样的反复循环过程,设定 downdown 变量表示是否向下,locloc 变量表示当前字符串数组的下标
如果 downdown 为 truetrue,则 loc+=1loc+=1,字符串数组下标向后移动,将当前字符加入当前字符串中
如果 downdown 为 falsefalse,则表示向右,则 loc-=1loc−=1,字符串数组下标向前移动,将当前字符加入当前字符串中
时间复杂度:O(n)O(n),nn为字符串s的长度
解法:
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
length = min(len(s), numRows)
rows = [""]*length
loc = 0
down = False
for c in s :
rows[loc] += c
if loc == 0 or loc == numRows - 1:
down = not down
if down:
loc+=1
else:
loc+=-1
ans = ""
for row in rows:
ans+=row
return ans