LeetCode[5]-最长回文子串,leetcode 8
判断一个整数是否是回文。回文是正确顺序(从左到右)和逆序(从右到左)相同的整数。
示例1:
输入:121
输出:真
示例2:
输入:-121
输出:假
说明:从左往右读,就是-121。从右向左读,是121-。所以这不是一个回文。
示例3:
输入:10
输出:假
说明:从右向左读,是01。所以这不是我思想的回文:
将字符串转换成数组,得到反转的结果,并进行比较。
如果是回文,整个反转后的数字没有变化,反之亦然。
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome=function(x) {
var result=x.toString()。拆分(“”)。反转()。联接(“”);
返回结果==x
};
-
老板们的想法:
方案一:常见方案最容易理解的方案是先把整数转换成字符串,再把字符串分割成数组。你只需要循环数组长度的一半来判断对应的元素是否相等。
解法二:高级解法——数学解法。
通过取整和余数运算,得到整数中对应的数字进行比较。
例如:数字1221。
通过计算1221/1000,得到第一个1。
通过计算1221% 10,可以得到最后一位1。
比较
再拿出22,继续对比。
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome=function(x) {
//边界判断
if(x ^ 0)返回false
var div=1;
//
而(x/div=10)div *=10;
while (x 0) {
var left=parse int(x/div);
var right=x % 10
如果(左!=right)返回false
x=parse int((x % div)/10);
div=parse int(div/100);
}
返回true
};执行时间:
552毫秒
,在所有javascript提交中落败。
5.03%
的用户
内存消耗:
81.8兆字节
,在所有javascript提交中落败。
5.01%
的用户
方案三:高级方案——巧妙方案。
直观的看回文,感觉就像把数字对折,看能不能一一对应。
所以这个解法的操作就是把数字的后半部分拿出来翻转。
这里需要注意的一点是,由于回文的个数是奇数和偶数,当它的长度是偶数时,对折时应该是相等的;当它的长度是奇数时,那么对折后,一的长度需要去掉一位数(除以10,四舍五入)。
具体做法如下:
每次执行余数运算()时,取出最低位数:y=x% 10。
在取款号码的末尾加上最小的数字:revertNum=revertNum * 10 y
取每一个最低的数字,x除以10。
判断X是否小于revertNum。当它是时,说明这个数已经是一半或一半了。
最后判断奇偶性:如果是偶数,revertNum和x相等;如果是奇数,中间的数在revertNum的最低位,除以10后应该等于x。
版权归作者所有:原创作品来自博主wx5c4a6751206d9,转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。