题目描述
题目来源:LeetCode 7
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
提示:
-231 <= x <= 231 - 1
一、Comprehend理解题意
该题可以理解为一个逆序输出问题,也是一个首尾交换问题,两端分别对应位置的数字进行交换
二、Choose数据结构及算法思维选择
方案一:逆序输出(暴力解法)
- 整数转字符串,字符串转数组
- 数据结构:字符数组
- 算法思维:遍历
方案二:首尾交换(优化解法)
- 整数转字符串,字符串转数组
- 数据结构:字符数组
- 算法思维:遍历
数据结构选择字符数组的原因
- 数组容量固定不变,需在创建数组时指定
- 使用连续的物理空间在存取数据
- 可以通过下标在O(1)的时间复杂度下读取数据
三、Code基本解法及编码实现
方案一:暴力解法
- 步骤
- 整数转字符串,再转字符数组
- 反向遍历字符数组,并将元素存储到新数组中
- 将新数组转成字符串,再转成整数输出
- 边界问题
- 数组索引越界
- 数值溢出边界:溢出则返回0
- 细节问题
- 首位不为0
- 符号处理
- 编码实现
class Solution {
public int reverse(int x) {
if(x > -10 && x < 10) {
return x;
}
if(x == Integer.MIN_VALUE || x == Integer.MAX_VALUE) {
// 整数类型的最小值的绝对值 比 最大值的绝对值 大1
return 0;
}
int sign = x > 0 ? 1 : -1; //符号
x = x< 0 ? -x : x ; //不论正负
// 1.将整数转成字符串,再转成字符数组;
String str =