Skip to content

Latest commit

 

History

History
33 lines (27 loc) · 1.17 KB

479. 最大回文数乘积.md

File metadata and controls

33 lines (27 loc) · 1.17 KB

479. 最大回文数乘积

题目传送门

点击这里

解题思路

这道题其实使用的就是枚举法,不会超时,枚举可以考虑n位整数相乘得到的最大长度也就是2n位,所以我们可以先确定左边n位,然后得到右边n位,判断该回文数是否满足条件。

代码

func largestPalindrome(n int) int {
    if n == 1 {
        return 9
    }
    num1 := int(math.Pow10(n)) - 1 // 如果是n位数字,最大为10^n-1,举例子如果n是3,则最大的两个数为999*999
    // 这里从回文这个点出发,999*999,n位数相乘,得到的数最大是2n位,所以我们可以确定最终结果的左边n位,然后去翻转得到右边n位,然后计算得到最终结果回文数
    // 得到该回文数后,判断是否可以由n位数相乘得到即可。
    for left := num1; ;left -- {
        n := left
        for r := left;r > 0;r /= 10 {
            n = n * 10 + r % 10 // 得到回文数结果
        }
        for i := num1;i * i >= n;i -- {
            if n % i == 0 {
                return n % 1337
            }
        }
    }
}