力扣479(java)-最大回文数乘积(困难)
题目:
给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。
示例 1:
输入:n = 2
输出:987
解释:99 x 91 = 9009, 9009 % 1337 = 987
示例 2:
输入: n = 1
输出: 9
提示:
1 <= n <= 8
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-palindrome-product
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
数学思维枚举:从n位数构成的最大整数开始从大到小枚举回文数,然后看这个回文数能否由最大整数相乘得到。
1.两个n位数相乘,乘积的位数为 2*n 位,要么为 2*n -1 位;
2.从大到小枚举一个n位数,作为回文数的前半部分,然后根据回文规则,生成回文数的后半部分;
3.最后判断构造的这个回文数,能否整除两个相同的n位数,如果能,则将回文数与1337取余返回即可,不能则返回 -1。
注释:
1.n为1时,最大整数为9, 9*9=81,小于81的回文数有:77,66,55,44,33,22,11,但是这些都不能整除两个相同的1位整数,只能回到回文数为1位的数 9。
2.Math.pow(10, n) - 1 : n位数的最大数为 [ 最小的n+1位数 - 1]
例如:2位数的最大数为 : 1000 - 1 = 99
3位数的最大数为 : 10000 - 1 = 999
4位数的最大数为 : 100000- 1 = 9999
3. (int) Math.pow(10, n) - 1 :为什么要强制转换为 int 类型?
因为math函数返回的是浮点数,而结果需要整数,所以要强制转换为int 类型
4.从大到小枚举回文的前半部分时,构造回文的后半部分
// 99 --> 9999
// 98 --> 9889
// 97 --> 9779
// 96 --> 9669
// ...
// 90 --> 9009
while(t != 0){
num = num * 10 + (t % 10);
t /= 10;
}
5.检查num能否由两个相同的n位整数的乘积构成
//j * j >= num 两个n位整数乘积最小边界为当前的回文num
//j是递减的,如果j * j < num,说明j需要乘一个大于j的数才有可能等于num,但是比j大的数在前面已经除过了
for(long j = max; j * j >= num; j--){
if(num % j == 0){
return (int)(num % 1337);
}
}
6.为什么要将 j 设置成 long型?
210约等于103,int的最大值231约等于109,如果将 j 设置成 int 类型,当n >= 5 时, j * j 就会超出int 类型的最大长度。
代码:
1 class Solution {
2 public int largestPalindrome(int n) {
3 if(n == 1) return 9;
4 //n位数的最大整数
5 int max = (int) Math.pow(10, n) - 1;
6 //从大到小开始枚举
7 for(int i = max; i >= 0; i--){
8 long num = i;
9 long t = i;
10 //构造回文的后半部分
11 while(t != 0){
12 num = num * 10 + (t % 10);
13 t /= 10;
14 }
15 //判断最大回文数能否整除最大整数
16 for(long j = max; j * j >= num; j--){
17 if(num % j == 0){
18 return (int)(num % 1337);
19 }
20 }
21 }
22 return -1;
23 }
24 }
力扣479(java)-最大回文数乘积(困难)的更多相关文章
- Java实现 LeetCode 479 最大回文数乘积
479. 最大回文数乘积 你需要找到由两个 n 位数的乘积组成的最大回文数. 由于结果会很大,你只需返回最大回文数 mod 1337得到的结果. 示例: 输入: 2 输出: 987 解释: 99 x ...
- Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
- Leetcode 479.最大回文数乘积
最大回文数乘积 你需要找到由两个 n 位数的乘积组成的最大回文数. 由于结果会很大,你只需返回最大回文数 mod 1337得到的结果. 示例: 输入: 2 输出: 987 解释: 99 x 91 = ...
- Java 9.回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false .回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不是. ...
- 479 Largest Palindrome Product 最大回文数乘积
你需要找到由两个 n 位数的乘积组成的最大回文数.由于结果会很大,你只需返回最大回文数 mod 1337得到的结果.示例:输入: 2输出: 987解释: 99 x 91 = 9009, 9009 % ...
- [Swift]LeetCode479. 最大回文数乘积 | Largest Palindrome Product
Find the largest palindrome made from the product of two n-digit numbers. Since the result could be ...
- java基础——回文数判断
/** * 题目描述: * 有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字.编写一个函数,判断某数字是否是回文数字. * 要求实现方法: * ...
- JAVA求回文数
Manacher算法(马拉车算法)时间复杂度O(n) 用过中心检测法(就是上面说的O(n2) O(n^2)O(n )的算法)的都知道对于奇数回文串和偶数回文串的处理是不同的,奇数回文串有2n+1 2n ...
- 力扣Leetcode 680. 验证回文字符串 Ⅱ
验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca ...
- java解决回文数
递归解决palindrome问题 如果String仅仅只是一个或者0个字符,则它就是palindrome 否则比较字符串第一个和最后一个字符 如果第一个和最后一个字符不同,那么就不是palindrom ...
随机推荐
- C++容器博客汇总
文章的原作者为 https://blog.csdn.net/qq_37529913?type=blog C++ STL 容器.迭代器.适配器(深入了解,一文学会) 1.STL容器 2.序列式容器 ...
- 通达信金融终端解锁Level-2功能 续(202307)
外挂方式,不修改原程序.解锁Level-2 逐笔分析.对"非法访问"Say NO! LEVEL2逐笔分析破解后,仍然被防调试. 竞价分析,实时资金示例. 逆向通达信Level-2 ...
- 腾讯Linux 运维工程师面试真题
腾讯Linux 运维工程师面试真题 1. 如何防止 DDOS 攻击?如提供足够资源给你,要保证用户访问不影响. 首先确定攻击源范围,如果是处于公司内部,那么暂时性的将这一区域的内部网络封掉,如 果是外 ...
- 【LeetCode刷题】239.滑动窗口最大值
239.滑动窗口最大值(点击跳转LeetCode) 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的k个数字.滑动窗口每次只向右移动一位. ...
- 记录--WebSocket 原理
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.什么是WebSocket WebSocket 是一种在单个TCP连接上进行全双工通信的协议.WebSocket 使得客户端和服务器之间 ...
- 记录--Vue自定义指令实现加载中效果v-load(不使用Vue.extend)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 网站效果演示:ashuai.work:8888/#/myLoad GitHub仓库地址代码:github.com/shuirongshu- ...
- C# SM2 解密 对接兴业银行业务
下载地址
- KingbaseES 等待事件之 - Client ClientWrite
等待事件含义 Client:ClientWrite等待事件指数据库等待向客户端写入数据. 在正式业务系统中,客户端必然和数据库集群之间有数据交互,这里指的是数据接收,发送.数据库集群在向客户端发送更多 ...
- archlinux xfce禁用Alt+F打开终端文件菜单
参照:https://superuser.com/questions/456024/how-to-disable-alt-f-shortcut-binding-from-file-menu-acces ...
- Python flask框架 request.json和request.form的区别
一.fetch请求时,request.json能获取到数据,request.form获取不到数据 1 var data = {'name':'test'}; 2 3 fetch('http://loc ...