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

栏目: 编程工具 · 发布时间: 5年前

内容简介:解题千千万,官方独一家,上面是官方使用 C# 进行的题解。小伙伴可以先自己在本地尝试解题,再看看官方解题,最后再回来看看将数字转为数组来判断,是比较简单的一种方法:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

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

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

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

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

三 解题

解题千千万,官方独一家,上面是官方使用 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;
};
复制代码
  • 执行测试
  1. x1231
  2. 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)
复制代码
  • 知识点
  1. split()split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。 split() 详细介绍
  • 解题思路
LeetCode - 009 - 回文数(palindrome-number)

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

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

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

接着,判断第 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);
};
复制代码
  • 执行测试
  1. x12321
  2. 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)
复制代码
  • 知识点
  1. Math :JS 中的内置对象,具有数学常数和函数的属性和方法。 Math 详细介绍
  • 解题思路
LeetCode - 009 - 回文数(palindrome-number)

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

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

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

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

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

jsliang广告推送:

也许小伙伴想了解下云服务器

或者小伙伴想买一台云服务器

或者小伙伴需要续费云服务器

欢迎点击 云服务器推广 查看!

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

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

jsliang 的文档库梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议 进行许可。

基于 github.com/LiangJunron… 上的作品创作。

本许可协议授权之外的使用权限可以从 creativecommons.org/licenses/by… 处获得。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

中国制造2025:产业互联网开启新工业革命

中国制造2025:产业互联网开启新工业革命

夏妍娜、赵胜 / 机械工业出版社 / 2016-2-22 / 49.00

过去20年,是中国消费互联网肆意生长的"黄金20年",诞生了诸如BAT等互联网巨头,而时至今日,风口正逐渐转向了产业互联网。互联网这一摧枯拉朽的飓风,在改造了消费服务业之后,正快速而坚定地横扫工业领域,拉开了产业互联网"关键30年"的大幕。 "中国制造2025"规划,恰是中国政府在新一轮产业革命浪潮中做出的积极举措,是在"新常态"和"供给侧改革"的背景下,强调制造业在中国经济中的基础作用,认......一起来看看 《中国制造2025:产业互联网开启新工业革命》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具