python求解特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。

采用双端链表求解


class Deque:
    def __init__(self):
        self.item = []

    def isEmpty(self):
        return self.item == []

    def addFront(self, item):
        self.item.append(item)

    def addRear(self, item):
        self.item.insert(0, item)

    def removeFront(self):
        return self.item.pop()

    def removeRear(self):
        return self.item.pop(0)

    def size(self):
        return len(self.item)


class PalindromeAchieve:
    def __init__(self, nNumbers):
        self.nNumbers = nNumbers

    def findpalindrome(self):
        for i in range(10001, 1000000):
            if self.judgepalindrome(str(i)):
                if self.sum_of_digits(i) == self.nNumbers:
                    print(i)

    def sum_of_digits(self, number):
        _sum = 0
        while number > 0:
            _sum += (number % 10)
            number //= 10
        return _sum

    def judgepalindrome(self, number):
        deque = Deque()
        for char in number:
            deque.addFront(char)

        while deque.size() > 1:
            first = deque.removeFront()
            last = deque.removeRear()
            if first != last:
                return False
        return True


n = int(input())
PalindromeAchieve(n).findpalindrome()

你可能感兴趣的:(算法)