题意
给一个字符串,把它按照反 N
形(也就是 N 的左右镜像的形状,先竖后右上)重新排列,然后按行输出。
题解
第一反应:暴力可解。
第二反应:既然暴力可解,那么有没有什么快速方法?直接从字符串里面做 text[i,len(text),step]
,拼接到 ans 里面。
然后,step 怎么求…… 而且一行中 step 也是在变化的。
遂放弃。
代码
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows == 1:
return s
t = [''] * numRows
numRows -= 1
now_row = 0
s_len = len(s)
dir = -1
for i in range(s_len):
t[now_row] += s[i]
if now_row in [0, numRows]:
dir *= -1
now_row += dir
return ''.join(t)
结果
1158 / 1158 test cases passed.
Status: Accepted
Runtime: 116 ms
桩程序
if __name__ == '__main__':
cases = [
{'text': 'PAYPALISHIRING', 'nRows': 1, 'ans': 'PAYPALISHIRING'},
{'text': 'PAYPALISHIRING', 'nRows': 2, 'ans': 'PYAIHRNAPLSIIG'},
{'text': 'PAYPALISHIRING', 'nRows': 3, 'ans': 'PAHNAPLSIIGYIR'},
{'text': 'PAYPALISHIRING', 'nRows': 4, 'ans': 'PINALSIGYAHRPI'},
]
for item in cases:
ans = (Solution()).convert(s=item['text'], numRows=item['nRows'])
print(str(ans == item['ans']) + "\t=>" + str(ans) + ":" + str(item['ans']))
发表回复