leetcode刷题笔记(二)[Go语言实现]

leetcode刷题笔记(二)

7. 整数反转
解法一:

321%10=1
321/10=32
32%10=2
32/10=3
3%10=3
用10对x取余,每取完一次,将x除10,每次循环就能从后往前取数字,然后存入到数组中。计算数组长度,通过乘法再相加,将其还原成数字。
其它限制条件通过几个if语句完成。

func reverse(x int) int {
	flag := 1
	if x<0 {
		x *= -1
		flag = -1
	}

	sum := make([]int,0)
	var ans int
	for i := 0;; i++ {
		sum = append(sum, x%10)
		if x<10 {
			break
		}
		x = x/10
	}
	y:=1
	for i := 1; i < len(sum); i++ {
		y *= 10
	}
	for _, i2 := range sum {
		ans += i2*y
		y /= 10
	}
	ans *=flag
	if ans > 2147483647 {
		return 0
	}
	if ans < -2147483648{
		return 0
	}
	
	return ans
}
优化的方法:

​ 只是免去了数组操作,通过自乘10再操作,省去了放入数组再拿出操作的过程,还无需判断正负再操作。

​ 同时进行类型强制转换后的判断,用另一种方式使溢出可知

func reverse(x int) int {
	var ans int64
	y := int64(x)
	for{
		ans = ans * 10 + y % 10
		y = y / 10
		if y == 0 {
			break
		}
	}
	result := int32(ans)
	if int64(result) == ans{
		return int(ans)
	}else {
		return 0
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值