pythontip 100days-day5

题目

输入一个list,将其翻转,不能够使用新的list,只能在原list上完成。

例子

  • None -> None
  • [] -> []
  • [1,2,3,4] -> [4,3,2,1]
  • [‘a’,’c’,’d’,’e’] -> [‘e’,’d’,’c’,’a’]

tips

1.头尾交换元素

答案

解法:1

def reverse(chars):
    if chars:
        size = len(chars)
        for i in range(size // 2):
            chars[i], chars[size - 1 - i] = chars[size - 1 - i], chars[i]
    return chars                           

性能

  1. 时间复杂度O(n)
  2. 空间复杂度O(1)

关键点:1.头尾交换元素

解法2:

def reverse(chars):
    if chars is None or chars == []:
        return chars

    result = []
    for char in chars:
        result.insert(0, char)

    return result

性能

  1. 时间复杂度O(n)
  2. 空间复杂度O(n)

关键点

  1. 构造一个新的列表,使用insert()插入元素

解法3:

def reverse(chars):
    if chars is None or chars == []:
        return chars
    chars.reverse()
    return chars

性能

  1. 时间复杂度O(n)
  2. 空间复杂度O(1)

关键点

  1. 使用列表的reverse()方法实现列表反转