目次
タイトル説明
32ビットの符号付き整数を指定すると、整数の各ビットの桁を反転する必要があります。オーバーフローした32ビット数の場合、0が返されます。
入出力の説明
入る | 321 |
出力 | 123 |
解決
トピックは比較的単純であり、2つの場所に注意を払う必要があります。
- 入力した数値は負の数である可能性があります。反転後も負の数は負です
- 反転数が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
}