资讯专栏INFORMATION COLUMN

LeetCode - 009 - 回文数(palindrome-number)

hikui / 1028人阅读

摘要:最后,我们判断一开始的两种情况,并返回或者即可。本许可协议授权之外的使用权限可以从处获得。

Create by jsliang on 2019-05-22 19:30:42
Recently revised in 2019-05-23 11:42:52

一 目录

不折腾的前端,和咸鱼有什么区别

目录
一 目录
二 前言
三 解题
 3.1 解题 - 数组操作
 3.1 解题 - 数学算法
二 前言

返回目录

难度:简单

涉及知识:数学

题目地址:leetcode-cn.com/problems/pa…

题目内容

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:
输入: 121
输出: true

示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:
你能不将整数转为字符串来解决这个问题吗?
三 解题

返回目录

官方题解:leetcode-cn.com/problems/pa…

解题千千万,官方独一家,上面是官方使用 C# 进行的题解。

小伙伴可以先自己在本地尝试解题,再看看官方解题,最后再回来看看 jsliang 讲解下使用 JavaScript 的解题思路。

3.1 解法 - 数组操作

返回目录

解题代码

var isPalindrome = function(x) {
  const arr = String(x).split("");
  for (let i = 0; i < arr.length / 2; i++) {
    if (arr[i] !== arr[arr.length - (i + 1)]) {
      return false;
    }
  }
  return true;
};

执行测试

    x1231

    return

false

LeetCode Submit

✔ Accepted
  ✔ 11509/11509 cases passed (316 ms)
  ✔ Your runtime beats 97.12 % of javascript submissions
  ✔ Your memory usage beats 67.78 % of javascript submissions (45.5 MB)

知识点

    split()split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。split() 详细介绍

解题思路

将数字转为数组来判断,是比较简单的一种方法:

首先,我们将数字转成字符串,再转成数组。

然后,我们循环遍历这个数组。

接着,判断第 i 位和第 length - (i + 1) 位(例如 1231,第 0 位对应的是第 length - 1 位,第 1 位对应的是第 length - 2 位)。

最后,如果循环判断没问题,就返回 true;如果循环判断有问题,直接在循环中 return false

3.2 解法 - 数学算法

返回目录

解题代码

var isPalindrome = function(x) {
  if(x < 0 || (x % 10 == 0 && x != 0)) {
    return false;
  }
  let revertedNumber = 0;
  while(x > revertedNumber) {
    revertedNumber = revertedNumber * 10 + x % 10;
    x = Math.floor(x / 10);
  }
  return x === revertedNumber || x === Math.floor(revertedNumber / 10);
};

执行测试

    x12321

    return

true

LeetCode Submit

✔ Accepted
  ✔ 11509/11509 cases passed (316 ms)
  ✔ Your runtime beats 97.12 % of javascript submissions
  ✔ Your memory usage beats 67.78 % of javascript submissions (45.5 MB)

知识点

    Math:JS 中的内置对象,具有数学常数和函数的属性和方法。Math 详细介绍

解题思路

首先,我们可以想象:当一个数的长度为偶数,那么它对折过来应该是相等的;当一个数的长度是奇数,那么它对折过来后,有一个的长度需要去掉一位数(除以 10 并取整),因为奇数长度的那个数,我们不需要判断它中间的数字。

我们定义传递过来的参数为:x,对折的数字为:z,而 yx 目前的个位数。

然后,我们需要知道如何获取到一个数的个位数:y = x % 10,我们也需要知道如何将单个数字不断添加到一个数的末尾:z = z * 10 + y,例如:z = 1 * 10 + 2 = 12

接着,我们只需要判断 x 是不是小于 z 了,毕竟当它小于的时候,说明数字已经对半或者过半了。

最后,我们判断一开始的两种情况,并返回 true 或者 false 即可。


jsliang 广告推送:
也许小伙伴想了解下云服务器
或者小伙伴想买一台云服务器
或者小伙伴需要续费云服务器
欢迎点击 云服务器推广 查看!


jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于github.com/LiangJunron…上的作品创作。
本许可协议授权之外的使用权限可以从 creativecommons.org/licenses/by… 处获得。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7195.html

相关文章

  • LeetCode 攻略 - 2019 年 7 月上半月汇总(55 题攻略)

    摘要:微信公众号记录截图记录截图目前关于这块算法与数据结构的安排前。已攻略返回目录目前已攻略篇文章。会根据题解以及留言内容,进行补充,并添加上提供题解的小伙伴的昵称和地址。本许可协议授权之外的使用权限可以从处获得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目录 不...

    warmcheng 评论0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月汇总(100 题攻略)

    摘要:月下半旬攻略道题,目前已攻略题。目前简单难度攻略已经到题,所以后面会调整自己,在刷算法与数据结构的同时,攻略中等难度的题目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道题,目前已攻略 100 题。 一 目录 不折腾的前端,和咸鱼有什么区别...

    tain335 评论0 收藏0
  • LeetCode 精选TOP面试题【51 ~ 100】

    摘要:有效三角形的个数双指针最暴力的方法应该是三重循环枚举三个数字。总结本题和三数之和很像,都是三个数加和为某一个值。所以我们可以使用归并排序来解决这个问题。注意因为归并排序需要递归,所以空间复杂度为 ...

    Clect 评论0 收藏0
  • 前端 | 每天一个 LeetCode

    摘要:在线网站地址我的微信公众号完整题目列表从年月日起,每天更新一题,顺序从易到难,目前已更新个题。这是项目地址欢迎一起交流学习。 这篇文章记录我练习的 LeetCode 题目,语言 JavaScript。 在线网站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公众号: showImg(htt...

    张汉庆 评论0 收藏0
  • LeetCode9.回文 JavaScript

    摘要:回文数判断一个整数是否是回文数。回文数是指正序从左向右和倒序从右向左读都是一样的整数。示例输入输出示例输入输出解释从左向右读为。因此它不是一个回文数。 LeetCode9.回文数 JavaScript 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false...

    junbaor 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<