题目
思路分析
题目要求:将字符串按照N的形状排列。
这题 我的第一思路是 二维数组,将元素先向下排,然后右上排 ,然后向下排。
感觉挺麻烦就直接开始百度了。
思路分析(改进)
思路一
参考博客
找出排列后的每一行中各个元素下表的关系
假设当前行数是r,总行数R,I(n)表示某行第n个字母在原字符串中的index,n从0开始:
- r=1,R时,
I(n+1) = I(n)+2(R-1) - 1<r<R时,
I(n+1) = I(n)+2(R-r) n为偶数时,
I(n+1) = I(n)+2(r-1) n为奇数
这里的规律比较难找。
思路二
参考博客
- 还是用二维数组,只需要关心当前元素是向上保存还是向下保存
- 注意方向掉头的时刻点。
代码展示(改进)
class Solution:
def convert(self, s: str, numRows: int) -> str:
#如果s为空、s的长度小于numRows、numRows为1,直接返回
if s==None or len(s)<=numRows or numRows==1:
return s
#创建二维数组temp,初始每一维都是一个空字符串
temp=['']*numRows
flag=False #用来标记当期记录往下保存还是向上保存
row=0
for i in s:
print(i,row) #用于测试
temp[row]+=i #当前行增加i
if row==0 or row==numRows-1: #改变方向
flag= not flag
if flag:
row+=1 #向下
else:
row-=1 #向上
res=''.join(temp) #join函数,字符串链接
return res
if __name__ == "__main__":
a = Solution()
print(a.convert('LEETCODEISHIRING', 3))