📜  N位最小和最大回文(1)

📅  最后修改于: 2023-12-03 15:33:16.024000             🧑  作者: Mango

N位最小和最大回文

回文是指正着读和倒着读都一样的字符串。在这个问题中,我们需要在N位数字中找到最小和最大的回文。

问题描述

给定一个数字N,返回一个由N位数字组成的最小和最大回文。

示例

输入:N=2

输出:最小回文:11,最大回文:99

输入:N=3

输出:最小回文:101,最大回文:999

解决方案

我们可以考虑在一半数字上构建回文。例如,在一个二位数中,我们可以在数字上构建回文为:101。同样,对于一个三位数,我们可以将其分成两部分,并且在最后一位数字中间插入一个中心数字,例如:回文为121。

根据这个思路,我们可以通过将数字转换为字符串来构建回文。首先,我们将前一半数字转换为字符串,然后将其反转并附加到末尾。这就给出了回文。但是,如果数字的位数是奇数,则我们需要将最中间的数字也复制到回文数字的右侧。

对于最小回文,我们将前一半数字设为'1',然后按上述方式构建回文。对于最大回文,我们将前一半数字设为'9',然后按上述方式构建回文。

代码实现
Python代码
def get_palindrome(n: int) -> tuple:
    """
    获取一个由N位数字组成的最小和最大回文数字

    :param n: int
    :return: (int, int)
    """
    half_n = n // 2
    min_palindrome = str(10**(half_n-1) + 1)[:half_n] + str(10**(half_n-1) + 1)[:half_n][::-1]
    max_palindrome = str(10**half_n - 1)[:half_n] + str(10**half_n - 1)[:half_n][::-1]
    return int(min_palindrome), int(max_palindrome)
Java代码
public static int[] getPalindrome(int n) {
    int halfN = n / 2;
    int[] result = new int[2];
    result[0] = Integer.parseInt(String.valueOf((int)Math.pow(10, halfN - 1) + 1)
        .substring(0, halfN) + new StringBuilder(String.valueOf((int)Math.pow(10, halfN - 1) + 1))
        .substring(0, halfN).reverse().toString());
    result[1] = Integer.parseInt(String.valueOf((int)Math.pow(10, halfN) - 1).substring(0, halfN) 
        + new StringBuilder(String.valueOf((int)Math.pow(10, halfN) - 1))
        .substring(0, halfN).reverse().toString());
    return result;
}
总结

在这个问题中,我们通过将数字转换为字符串来构建回文。我们首先将前一半数字转换为字符串,然后将其反转并附加到末尾。但是,如果数字的位数是奇数,则我们需要将中心数字也复制到回文数字的右侧。根据这个思路,我们可以构建最小和最大回文。