整数反转(Go, LeetCode)

本文介绍了一种算法,用于翻转32位有符号整数的每一位数字,同时处理负数和溢出情况。通过将整数转换为字符串进行逆序,再转换回整数,确保结果在32位范围内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目描述

解决方案

代码

代码走读

传送门


题目描述

给出一个32位的有符号整数,你需要将这个整数中每位上的数字反转。对于溢出32位的数字则返回0。

输入/输出描述

输入321
输出123

解决方案

题目较为简单,需要在两个地方注意:

  • 输入的数字可能是负数。负数反转后还是负数
  • 反转后的数字如果超出32位,则需要返回0

代码

package main

import "strconv"

func reverse(x int) int {
	positive := true
	if x < 0 {
		positive = false
		x = -x
	}

	xStr := strconv.Itoa(x)
	resultStr := ""
	for i := len(xStr) - 1; i >= 0; i-- {
		resultStr += string(xStr[i])
	}

	result, _ := strconv.Atoi(resultStr)
	if !positive {
		result = -result
	}

	if result < -(1<<31) || result > (1<<31)-1 {
		result = 0
	}
	return result
}

代码走读

package main

import "strconv"

func reverse(x int) int {
   // 先判断x的正负性。记录后将x统一转换为正数(方便逆序)
   positive := true
   if x < 0 {
      positive = false
      x = -x
   }

   // 将x转换为字符串逆序,得到逆序后的字符串
   xStr := strconv.Itoa(x)
   resultStr := ""
   for i := len(xStr) - 1; i >= 0; i-- {
      resultStr += string(xStr[i])
   }

   // 根据先前记录的正负性,将逆序后的字符串还原为整数结果
   result, _ := strconv.Atoi(resultStr)
   if !positive {
      result = -result
   }

   // 判断是否溢出32位
   if result < -(1<<31) || result > (1<<31)-1 {
      result = 0
   }
   return result
}

传送门

LeetCode试题链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值