LeetCode[5]-最长回文子串,leetcode 8

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: