1、题目
2119. 反转两次的数字https://leetcode.cn/problems/a-number-after-a-double-reversal/
反转 一个整数意味着倒置它的所有位。
例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。
给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。
示例 1:
输入:num = 526
输出:true
解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。
示例 2:
输入:num = 1800
输出:false
解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。
示例 3:
输入:num = 0
输出:true
解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。
提示:
0 <= num <= 106
2、题解
思路1:(比较笨的方法)
先反转一次num得到reversed1,再反转一次reversed1得到reversed2,将reversed2与num值进行比较,若相等则返回true,否则返回false。
问题就转变成了"求一个数字num的反转后的值":
先设置一个result来保存反转后的值,取出num的个位数a,我要怎么保存到result中呢,就是每次把result先乘10(即把所有的数位往前移动一位,这样就空出了个位),再把a加上去,最后result中保存的就是num的反转值。
例如:num=123(初始result= 0)
第一轮,a = 123%10 = 3,result = 0*10+3 = 3,a = 123/10 = 12;
第二轮,a = 12%10 = 2,result = 3*10+2 = 32,a = 12/10 = 1;
第三轮,a = 1%10 = 1,result = 32*10+1 = 321,a = 1/10 = 0;
由于a=0了,结束循环,返回result = 321
代码1:
java
class Solution {
public boolean isSameAfterReversals(int num) {
int reversed1 = reverse(num); //先反转一次num
int reversed2 = reverse(reversed1); //再反转一次reversed1
if(reversed2 == num) { //将reversed2与num比较
return true;
} else {
return false;
}
}
//将num反转
private int reverse(int num) {
int result = 0; //用来保存反转后的数字
while (num != 0) {
int a = num % 10; //取出个位数
result = result * 10 + a; //将result的值 * 10,再加上a
num = num / 10; //去掉个位数
}
return result;
}
}
思路2:(非常聪明!!)
当num值不为0,且最后一位数是0时,那反转了一次,位数就肯定减少了,再怎么反转,也不会和刚开始的num值一样了,那就直接判断num != 0时,num的最后一位数是否为0就可以啦!!
代码2:
java
class Solution {
public boolean isSameAfterReversals(int num) {
if(num != 0 && num%10== 0) { //num不为0且num的个位数是0
return false;
} else {
return true;
}
}
}