LeetCode_2119. 反转两次的数字_java

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;
        }
    }
}
相关推荐
黑胡子大叔的小屋34 分钟前
基于springboot的海洋知识服务平台的设计与实现
java·spring boot·毕业设计
ThisIsClark36 分钟前
【后端面试总结】深入解析进程和线程的区别
java·jvm·面试
火星机器人life1 小时前
基于ceres优化的3d激光雷达开源算法
算法·3d
虽千万人 吾往矣1 小时前
golang LeetCode 热题 100(动态规划)-更新中
算法·leetcode·动态规划
雷神乐乐1 小时前
Spring学习(一)——Sping-XML
java·学习·spring
arnold662 小时前
华为OD E卷(100分)34-转盘寿司
算法·华为od
小林coding2 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
V+zmm101342 小时前
基于小程序宿舍报修系统的设计与实现ssm+论文源码调试讲解
java·小程序·毕业设计·mvc·ssm
ZZTC2 小时前
Floyd算法及其扩展应用
算法
文大。2 小时前
2024年广西职工职业技能大赛-Spring
java·spring·网络安全