Skip to content

Latest commit

 

History

History

007.ReverseInteger

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

代码实现

007.ReverseInteger

解题思路

依次取个位、十位、百位......的值,在与当前值相加前,将结果乘以十倍,达到左移的效果:

let y = 0
let n = x

while (n) {
  y *= 10
  y += (n % 10)
  n = ~~(n / 10)
}

比如数字123,执行的流程如下:

  • y *= 10,得到y = 0
  • y += (123 % 10),得到y = 3
  • n = ~~(123 / 10),得到n = 12
  • y *= 10,得到y = 30
  • y += (12 % 10),得到y = 32
  • n = ~~(12 / 10),得到n = 1
  • y *= 10,得到y = 320
  • y += (1 % 10),得到y = 321
  • n = ~~(1 / 10),得到n = 0,跳出循环

于是得到了无符号整数值,但是题目说明了结果需要是32位有符号整数,因此还需要加上符号以及判断是否溢出:

if (y > 2147483647 || y < -2147483648) {
  return 0
}

最后返回相应的结果:return x < 0 ? -y : y,就得到了题目的解。