https://leetcode.com/problems/zigzag-conversion/
要鋸齒狀的輸出
首先分組
如果nRows為m 那么縱列 m 個斜 m-2個 因此 每2m-2個字符是一組 每組占據m-1列
並根據這樣算出要初始化的數組list的大小
1 | A | |||||
2 | 8 | B | ||||
3 | 7 | C | G | |||
4 | 6 | D | F | |||
5 | E |
接着按照要求 輸出字符即可 用while len>2m-2 之前整組輸出 最后一組單獨輸出 因為長度沒辦法輸出完整租
最后將list種的字符按行輸出即可
class Solution: # @param {string} s # @param {integer} numRows # @return {string} def convert(self, s, numRows): #初始化 m=numRows if m==1: return s elif m==2: string='' for i in range(len(s)): if i%2==0: string=string+s[i] for i in range(len(s)): if i%2==1: string=string+s[i] return string else: #2m-2 多少個數分一組 a=len(s)/(2*m-2)#每組占多少列 b=len(s)%(2*m-2)#最后不足一組的長度 if b<=m: n=a*(m-1)+1 else: n=a*(m-1)+b-m+1 #m行n列 list=[([0] * n) for i in range(m)] index=0 while len(s)>=2*m-2: #輸出列 m個 for i in range(m): list[i][index*(m-1)]=s[i] #輸出斜 for i in range(m-2): list[m-i-2][index*(m-1)+i+1]=s[i+m] index=index+1 s=s[2*m-2:] else:#剩下的不足以輸出整個組 判斷個數能輸出列否 斜否 if len(s)<=m:#只列 for i in range(len(s)): list[i][index*(m-1)]=s[i] else: extra=len(s)-m for i in range(m): list[i][index*(m-1)]=s[i] for i in range(extra): list[m-i-2][index*(m-1)+i+1]=s[i+m] sol='' for i in range(m): for j in range(n): if list[i][j]!=0: sol=sol+list[i][j] return sol
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。