前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2021-09-11:给你一个32位的有符号整数x,返回将x中的数

2021-09-11:给你一个32位的有符号整数x,返回将x中的数

原创
作者头像
福大大架构师每日一题
修改2021-09-13 11:16:10
修改2021-09-13 11:16:10
6580
举报

2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号)。

福大大 答案2021-09-11:

数位用负数。

时间复杂度:O(logN)。

空间复杂度:O(1)。

代码用golang编写。代码如下:

代码语言:txt
复制
package main

import (
	"fmt"
	"math"
)

func main() {
	i := math.MinInt64
	ret := reverse(i)
	fmt.Println(i)
	fmt.Println(ret)
}

func reverse(x int) int {
	neg := ((uint(x) >> 63) & 1) == 1
	x = twoSelectOne(neg, x, -x)
	m := math.MinInt64 / 10
	o := math.MinInt64 % 10
	res := 0
	for x != 0 {
		if res < m || (res == m && x%10 < o) {
			return 0
		}
		res = res*10 + x%10
		x /= 10
	}
	return twoSelectOne(neg, res, Abs(res))
}

func twoSelectOne(c bool, a int, b int) int {
	if c {
		return a
	} else {
		return b
	}
}

func Abs(a int) int {
	if a < 0 {
		return -a
	} else {
		return a
	}
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档