479. 最大回文数乘积

最大回文数乘积

题目描述:

给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。

示例 1:

输入:n = 2
输出:987
解释:99 x 91 = 9009, 9009 % 1337 = 987
示例 2:

输入: n = 1
输出: 9

提示:

1 <= n <= 8
通过次数11,300提交次数19,314

思路:

时间复杂度:O(),空间复杂度O()

有技巧的暴力,回文数只需要知道半边就行,从大到小然后判断这个回文数是否能够被整除,如果整除就说明是答案。

代码:

func largestPalindrome(n int) int {
    if n == 1 {
        return 9
    }
    upper := int(math.Pow10(n)) - 1
    for left := upper; ; left-- { // 枚举回文数的左半部分
        p := left
        for x := left; x > 0; x /= 10 {
            p = p*10 + x%10 // 翻转左半部分到其自身末尾,构造回文数 p
        }
        for x := upper; x*x >= p; x-- {
            if p%x == 0 { // x 是 p 的因子
                return p % 1337
            }
        }
    }
}

代码效率:

执行用时:84 ms, 在所有 Go 提交中击败了90.91%的用户
内存消耗:1.9 MB, 在所有 Go 提交中击败了63.64%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!