学习目标:
本次学习目标为 力扣初级算法-字符串,其中主要的LC如下:
- 整数反转
学习内容:
- 只出现一次的数字 (链接)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。示例1:
输入:x = 123
输出:321示例2:
输入:x = -123
输出:-321示例2:
输入:x = -123
输出:-321
解题思路:
- 解法一: 直接反转法
- 边界问题:考虑超过32位的情况、及转换后对应的值不相等问题
- 思路:将输入的数值,当做n个字符组成的字符串,一边左移取余,取余后将对应的数值作为个位上的数值,再将上一次的循环值往右移动一位(即乘上十),为保证移动后的数值不超过 int 的数值最大值,故需要再将得到的结果除以10取余,将余数与入参当前的个位数是否相等,如果不相等,可认为当前反转后的数值已超过int数据类型的最大值。
- 代码实现:
// 直接翻转法
public int reverse01(int x) {
int result = 0 ;
while (x != 0){
// 取余数
int t = x % 10;
int newResult = result * 10 + t;
if ((newResult -t)/10 != result){
return 0;
}
result = newResult;
x = x/10;
}
return result;
}