blog

博客

View on GitHub

给定一个范围为 32 位 int 的整数,将其颠倒。

例 1:   输入: 123        输出:  321

例 2:   输入: -123       输出: -321

例 3:   输入: 120        输出: 21

注意:

假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。


第二版

这道题本来原理就比较简单。 num = (num*10 + x%10) 就是整个思路的关键

func reverse(x int) int {
	num := 0
	for x != 0 {
	    //核心代码  
		num = (num*10 + x%10)
		x = x / 10
		if num < math.MinInt32 || num > math.MaxInt32 {
			return 0
		}
	}

	return num
}


第一版

package main

import (
	"fmt"
	"math"
)

func main() {
	sum := reverse(-100)
	fmt.Println(sum)
}

func reverse(x int) int {
	num := 0
	arr := make(map[int]int)
	bin := false
	if x < 0 {
		bin = true
		x = 0 - x
	}

	i := 0
	for ; x/10 > 0; x = x / 10 {

		arr[i] = x % 10
		i++

	}
	if x/10 == 0 {
		arr[i] = x
	}

	c := false
	for i := 0; i < len(arr); i++ {
		if arr[i] > 0 || c {

			num = num + arr[i]
			c = true
			num = num * 10
		}
	}

	if bin {
		num = 0 - num
	}
	num = num / 10

	if num < math.MinInt32 || num > math.MaxInt32 {
		return 0
	}
	return num
}