js回文数的4种判断方法示例


Posted in Javascript onJune 04, 2019

前言

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

例如:

121,是回文数。
1221, 是回文数。
1234,不是回文数。
-121,也不是回文数。

一些特殊的情况:

  • 0-9的数字,都可以称为回文。
  • 不等于0,且尾数是0的数字,都不是回文。
  • 负数都不是回文。

1. 字符串的转换

1.1 简单点,使用高阶函数来完成

思路: 先将数字转成字符串A,再经过变成数组,数组反转,数组变成字符串B三步操作之后,比较字符串A和B,得出结论。

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  if ( x < 0 ) return false
  let str = '' + x
  return Array.from(str).reverse().join('') === str
};

1.2 从后往前循环字符串数组

思路:将数字转换成字符串A,从后往前循环字符串A,将循环出来的字符拼接成新的字符串B,比较字符串A和B,得出结论。

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  let str = x + ''
  let newStr = ''
  for(let len = str.length, i = len - 1; i >= 0 ; i--) {
    newStr += str[i]
  }}
  return newStr === str
};

1.3 以中间数为节点,判断左右两边首尾是否相等

/**
 * 以中间数为节点,判断左右两边首尾是否相等
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  if ( x < 0 || (x !== 0 && x % 10 === 0)) {
    return false
  } else if ( 0 <= x && x < 10) {
    return true
  }
  x = '' + x
  for(let i = 0 ; i < x.length/2; i++) {
    if (x[i] !== x[x.length - i - 1]) {
      return false
    }
  }
  return true
};

2. 数字转换

2.1 求模得尾数,除10得整数

思路: 先判断一些特殊情况【小于0的、尾数为0的、小于10的正整数】。之后,将整数反转,反转前后两个整数是否相等来判断是否为回文整数。

这里的反转:将整数求模得到尾数,之后每求一次模,都再原数上添加一位(通过*10来得到),这样就能得到一个反转的数。

计算需要求模的次数: 将整数除10,来计算求模的次数。Math.floor() 返回小于或等于一个给定数字的最大整数。

/**
 * 求模得尾数,除10得整数
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  if ( x < 0 || (x !== 0 && x % 10 === 0)) {
    return false
  } else if ( 0 <= x && x < 10) {
    return true
  }
  let y = x
  let num = 0
  while(x !== 0) {
    num = x % 10 + num * 10
    x = Math.floor(x / 10)
  }
  return y === num
};

以上即是回文数的判断方法,如有其它方法,可以补充。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
比较详细的关于javascript 解析json的代码
Dec 16 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
三种Node.js写文件的方式
Mar 08 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 Javascript
百度多文件异步上传控件webuploader基本用法解析
Nov 07 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
JS运动特效之同时运动实现方法分析
Jan 24 Javascript
vue分页插件的使用方法
Dec 25 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 Javascript
Vue对象赋值视图不更新问题及解决方法
Jun 03 #Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 #Javascript
JavaScript之数组扁平化详解
Jun 03 #Javascript
JavaScript从原型到原型链深入理解
Jun 03 #Javascript
生产制造追溯系统之再说条码打印
Jun 03 #Javascript
VUE安装使用教程详解
Jun 03 #Javascript
教你完全理解ReentrantLock重入锁
Jun 03 #Javascript
You might like
文件上传类
2006/10/09 PHP
php 各种应用乱码问题的解决方法
2010/05/09 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
Python中datetime常用时间处理方法
2015/06/15 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
艺术用品:Arteza
2018/11/25 全球购物
致铅球运动员加油稿
2014/02/13 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
纪律教育月活动总结
2014/08/26 职场文书
公司委托书格式范本
2014/09/16 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
大学生暑假实习总结
2015/07/13 职场文书