class Solution:
# @return a string
def convert(self, s, nRows):
rowStrings = []
for i in range(0,nRows):
rowStrings.append("")
index = 0
direction = "DOWN"
for i in range(0,len(s)):
rowStrings[index] = rowStrings[index] + s[i]
print index
print s[i]
if (direction == "DOWN"):
index += 1
else:
index -= 1
if (index == 0):
direction = "DOWN"
elif (index == nRows - 1):
direction = "UP"
return "".join(rowStrings)
#the main code
sol = Solution()
print sol.convert("AB", 2)
Runtime Error Message: Line 12: IndexError: list index out of range
Last executed input: "AB", 1
我倾向于认为某处存在逻辑错误,因为我在C ++和现在的Python中使用相同的逻辑,并且根据网站我遇到了运行时错误。有趣的是,在本地,答案在我的C ++和Python代码中都是正确的,并且没有发生运行时错误。 python错误代码更具描述性,因此我在这里发布了python代码。
其他人经历过这个/我在这里想念一些简单的东西吗?
答案 0 :(得分:1)
range()
不包含最后一个参数的值,所以
range(0, 1)
只会生成[0]
。
然后在for
循环中,index
等于0,然后是1,这超出rowStrings
的范围。
而且,如您所见,您的输入参数值等于'AB'和1。
答案 1 :(得分:1)
from itertools import cycle
def convert(text, num_rows):
# zigzag: [0 .. num_rows-1] [num_rows-2 .. 1]
offsets = list(range(num_rows)) + list(range(num_rows - 2, 0, -1))
rows = [[] for _ in range(num_rows)]
for row, ch in zip(cycle(offsets), text):
rows[row].append(ch)
rows = ["".join(row) for row in rows]
return "".join(rows)