Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”

Posted 目前在腾讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”相关的知识,希望对你有一定的参考价值。

[本文出自天外归云的博客园]

我做了两种解法,一种是利用python内置函数,另一种是自定义与数字相关的类与函数。

‘‘‘
解法1:利用python中与列表相关的内置函数
‘‘‘


def move_numbers(numbers: list, new_numbers=[]):
    while len(numbers) > 0:
        if numbers[0] % 2 == 0:
            number = numbers.pop(0)
            new_numbers.append(number)
        else:
            number = numbers.pop(0)
            new_numbers.insert(0, number)
    print(new_numbers)


‘‘‘
解法2:自定义与数字相关的类与函数
‘‘‘


class Numbers:
    header = None
    tail = None
    numbers = None

    class Number:
        def __init__(self, value):
            self.value = value
            self.next = None

    def __init__(self, *args):
        self.numbers = tuple([Numbers.Number(arg) for arg in args])
        self.install(self.numbers)

    def install(self, args: tuple):
        for i in range(len(args)):
            number = args[i]
            if i == 0 and len(args) > 1:
                number.next = args[i + 1]
                self.header = number
            if i > 0 and i < len(args) - 1:
                number.next = args[i + 1]
            if i == len(args) - 1 and len(args) > 1:
                self.tail = number

    def show(self):
        subs = []
        index = self.header
        while index:
            subs.append(index.value)
            index = index.next
        print(subs)

    def move(self):
        index = self.header
        new_header = None
        for i in range(len(self.numbers)):
            _next = index.next
            if index.value % 2 == 0:
                index.next = None
                self.tail.next = index
                self.tail = index
            if index.value % 2 != 0 and i != 0:
                if new_header:
                    index.next = new_header
                    new_header = index
                else:
                    new_header = index
                    new_header.next = self.header
                self.header = new_header
            index = _next


‘‘‘
题目:
    遇到奇数移动到最前面
    遇到偶数移动到最后面
‘‘‘
if __name__ == __main__:
    # 解法1
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    move_numbers(numbers)

    # 解法2
    numbers = Numbers(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
    numbers.move()
    numbers.show()

 

以上是关于Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer-动态规划解礼物的最大价值

剑指 Offer 14- I. 剪绳子(C++暴力+动态规划贪心解)

剑指offer——03从尾至头打印列表(Python3)

剑指offer——06旋转数组的最小数字(Python3)

小航的算法日记字符串

如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?