2015-01-13 2 views
-1

ZigZag ConversionLeetcode: зигзаг Conversion - код работает нормально в локальном IDE Python, но терпит неудачу онлайн-тест

Эй, ребят, я пытаюсь пройти выше тест на 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 Code, и не возникает ошибка времени выполнения. Код ошибки python был более описательным, поэтому я разместил здесь код python.

Кто-нибудь еще испытывает это/пропустил я здесь что-то простое?

+3

Пожалуйста, не спам-теги. Здесь нет кода на C++. –

+0

Извините. Я удалил его. Будем иметь в виду в следующий раз – newbie

ответ

1

range() не включает значение последнего аргумента, поэтому range(0, 1) будет генерировать только [0]. Затем в цикле for у вас есть index, равный 0, затем 1, который находится за пределами поля для rowStrings. И, как вы видите, у вас есть значения входных аргументов, равное «AB» и 1.

+0

А, я вижу. Мой код не обрабатывает случай nRows = 1. Вау, это была тонкая ошибка. Как бы вы переписали код, чтобы избежать такого рода проблем? Хлоп. – newbie

+0

Скорее, что-то не так с моим стилем петли? Мой код плохо охватывает цикл? Это «проблема», что часть работы заканчивается частично через петлю? – newbie

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)