BluePen BluePen
  • Jenkins
  • OS
  • 算法
随笔
分类
标签
归档
关于
留言板
GitHub (opens new window)

Alex

一个好人
  • Jenkins
  • OS
  • 算法
随笔
分类
标签
归档
关于
留言板
GitHub (opens new window)
  • leetcode

    • 哈希

    • 字符串操作

    • 数字操作

      • 回文数
        • 题目描述
        • 解法
        • 总结
      • 字符串转数字(atoi)
      • 整数反转
    • 双指针

    • 递归

    • 链表

    • 动态规划

    • 二分法

  • interview

  • well_known_algo

  • algo
  • leetcode
  • 数字操作
Alex
2019-07-31
目录

回文数

-> 题目描述

Palindrome Number

判断一个数字是不是回文数。回文数即数字从末尾反过来依旧和原数字相同

示例1:

Input: 121
Output: true
1
2

示例2:

Input: -121
Output: false
Explanation: 从左到右为 -121, 反过来是 121-,所以不是回文数
1
2
3

示例3:

Input: 10
Output: false
1
2

javascript:

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    
};
1
2
3
4
5
6
7

要求:不能将数字转化为字符串来解

From leetcode No.9 Easy (opens new window)

-> 解法

点击查看
/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if(x<0 || x%10 ===0)
        return false
    const ret = []
    let y = x
    if(x<10)
        return true
    while(x !==0){
        const remainder = x%10
        ret.push(remainder)
        x = (x - remainder)/10
    }
    const sum = ret.map((curr, i)=>{
        return curr*Math.pow(10, ret.length-i-1)
    }).reduce((x,y)=>x+y)

    if(y === sum)
        return true
    return false
    
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

-> 总结

虽然是 easy难度,但还是没有一次成功。
思路很常规,把数字倒过来求和与原来的比较是否相等即可。
注意几个特殊情况:

  • 复数均为 false
  • 0-9均为 true
  • 10的倍数为 false

排名最快的算法用的是双指针,即一次循环比较前后的数是否相等,确实更加符合直觉

编辑此页 (opens new window)
更新于: 2019-07-31 15:56
Z 型变换
字符串转数字(atoi)

← Z 型变换 字符串转数字(atoi)→

Copyright © 2019-2022 | yxxy | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式