[LeetCode] 906. Super Palindromes 超级回文数
Let's say a positive integer is a *superpalindrome* if it is a palindrome, and it is also the square of a palindrome.
Now, given two positive integers L and R(represented as strings), return the number of superpalindromes in the inclusive range [L, R].
Example 1:
Input: L = "4", R = "1000"
Output: 4
Explanation: 4, 9, 121, and 484 are superpalindromes.
Note that 676 is not a superpalindrome: 26 * 26 = 676, but 26 is not a palindrome.
Note:
1 <= len(L) <= 181 <= len(R) <= 18LandRare strings representing integers in the range[1, 10^18).int(L) <= int(R)
这道题对于正整数定义了一种超级回文数,即其本身是回文数,并且是另一个回文数的平方,现在给了我们一个范围 [L, R],让返回这个范围内所有超级回文数的个数。当然最暴力的办法就是遍历每个数字,然后看其是否是回文数字,然后再检测其平方数是否是回文数,这种方法基本不太可能通过 OJ,因为绝大多的数字都不是回文数,每个都检测一遍实在是太费时间了,那么应该怎么办呢?实际上我们应该主动的去构建回文数,对于一个回文数字,若在两边各加上一个相同的数字,则新组成的数字一定也是回文数字,那么对于这个新组成的回文数,只需要验证一下其平方数是否也是回文数即可,这样就大大的减少了运算步骤,从而逃脱 OJ 的魔爪。
具体来说,由于给定的L和R范围超过了整型最大值,所以要转为长整型。然后需要使用上面提到的方法来构建回文数,由于回文数有奇数和偶数两种形式,比如 22 就是偶数形式,131 就是奇数形式。先构造偶数个的回文数,就是直接在空串的两端加相同的数字即可,构建的过程放到一个递归函数中。同理,构造奇数个的回文数,就是先生成中间的单独数字,这里可以是从0到9的任意数字,然后再在两边加相同的数字,调用递归函数。在递归函数,首先判断当前数字的长度,若超过了9,说明当前数字的平方数长度会超过 18,需要直接返回,因为题目中限定了L和R的长度不超过 18。再判断若当前数字不为空,且第一个数字不为0时,要验证其平方数是否为回文数。因为多位数的首位不能是0,题目中给定了L和R的范围是从1开始的,所以不会是单独的0。此时我们将当前数字的字符串转为长整型,然后计算其平方数,若该数字大于右边界 right,则直接返回,否则看若数字大于等于左边界,且是回文数的话,结果 res 自增1。之后就要继续构建新的回文数,做法还是在两边同时增加两个相同的数字,并对每个新构建的回文数调用递归即可,参见代码如下:
```
class Solution {
public:
int superpalindromesInRange(string L, string R) {
int res = 0;
long left = stol(L), right = stol(R);
helper("", left, right, res);
for (char c = '0'; c 9) return;
if (!cur.empty() && cur[0] != '0') {
long num = stol(cur);
num *= num;
if (num > right) return;
if (num >= left && isPalindrome(to_string(num))) ++res;
}
for (char c = '0'; c
Github 同步地址:
https://github.com/grandyang/leetcode/issues/906
参考资料:
https://leetcode.com/problems/super-palindromes/
https://leetcode.com/problems/super-palindromes/discuss/170774/Java-building-the-next-palindrome
[LeetCode All in One 题目讲解汇总(持续更新中...)](https://www.cnblogs.com/grandyang/p/4606334.html)
[LeetCode] 906. Super Palindromes 超级回文数的更多相关文章
- [Swift]LeetCode906. 超级回文数 | Super Palindromes
Let's say a positive integer is a superpalindrome if it is a palindrome, and it is also the square o ...
- LeetCode Problem 9:Palindrome Number回文数
描述:Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could nega ...
- 【leetcode算法-简单】9. 回文数
[题目描述] 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: ...
- 【LeetCode】9. Palindrome Number 回文数
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:回文数,回文,题解,Leetcode, 力扣,Python ...
- LeetCode随缘刷题之回文数
package leetcode.day_01_30; /** * 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . * <p> * 回文数是指正 ...
- LeetCode(9):回文数
Easy! 题目描述: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: f ...
- LeetCode OJ Palindrome Number(回文数)
class Solution { public: bool isPalindrome(int x) { ,init=x; ) return true; ) return false; ){ r=r*+ ...
- Leetcode 564.寻找最近的回文数
寻找最近的回文数 给定一个整数 n ,你需要找到与它最近的回文数(不包括自身). "最近的"定义为两个整数差的绝对值最小. 示例 1: 输入: "123" 输出 ...
- Java实现 LeetCode 564 寻找最近的回文数(今天要GG在这道题了 头晕+题难(((φ(◎ロ◎;)φ))))
564. 寻找最近的回文数 给定一个整数 n ,你需要找到与它最近的回文数(不包括自身). "最近的"定义为两个整数差的绝对值最小. 示例 1: 输入: "123&quo ...
随机推荐
- LeetCode20——有效的括号
在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试.想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了 ...
- Vue.js安装及环境搭建
Vue.js环境搭建-Windows版 步骤一:安装node.js 在搭建vue的开发环境之前,需要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,node可以在官网或者 ...
- 带你认识MySQL sys schema
前言: MySQL 5.7中引入了一个新的sys schema,sys是一个MySQL自带的系统库,在安装MySQL 5.7以后的版本,使用mysqld进行初始化时,会自动创建sys库. sys库里 ...
- C#中的一些对话框问题处理
1. 对于打开文件对话框处理 #region 打开文件对话框 string StrPath; OpenFileDialog Flag = new OpenFileDialog(); Flag.Mult ...
- Python - 获取本机IP地址、Mac地址
Python - 获取本机IP地址.Mac地址 在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 直接看代码: # Python - 获取本机I ...
- 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践
腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...
- Flask--g属性
目录 Flask之g属性 使用 session,flash,g的区别 Flask之g属性 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 ...
- SpringBoot+vue整合websocket
0.引言 这里我先说下,网上对于websocket的解释有一堆不懂自己查,我这就不做原理解释,只上代码. 1.SpringBoot引入websocket maven 依赖 <dependency ...
- Android中获取实时网速(2)
一.实现思路: 1.Android提供有获取当前总流量的方法 2.上一秒 减去 下一面的流量差便是网速 3.注意计算 二.计算网速的工具类: package imcs.cb.com.viewappli ...
- 1.监控软件zabbix-入门
入门学习 首先要明白zabbix的读音(音同zæbix),主要进行网络相关的监控.它是一个基于WEB界面展示提供分布式系统监控的一款开源软件. zabbix有两部分:zabbix server和zab ...