Leetcode:Zigzag Conversion - Code在本地Python IDE中运行良好,但在线测试失败

时间:2015-01-13 23:02:23

标签: python

ZigZag Conversion

嘿伙计们, 我试图通过leetcode传递上述测试。我的代码在本地运行良好,但是当我提交它以在线测试时,它会失败:

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代码。

其他人经历过这个/我在这里想念一些简单的东西吗?

2 个答案:

答案 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)