反转之后的数字和

117 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

🎈算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 -> 反转之后的数字和

题目描述

给你一个 非负 整数 num 。如果存在某个 非负 整数 k 满足 k + reverse(k) = num  ,则返回 true ;否则,返回 false 。

reverse(k) 表示 k 反转每个数位后得到的数字。

示例 1:

输入:num = 443
输出:true
解释:172 + 271 = 443 ,所以返回 true

示例 2:

输入:num = 63
输出:false
解释:63 不能表示为非负整数及其反转后数字之和,返回 false

示例 3:

输入:num = 181
输出:true
解释:140 + 041 = 181 ,所以返回 true 。注意,反转后的数字可能包含前导零。

提示:

  • 0 <= num <= 10^5

思路分析

首先我们要先理解一下题目的意思,题目会给我们一个整数num,我们需要找到一个整数k,使其满足k + reverse(k) = num,首先我们可以确认如果存在满足条件的k的话,k应该要小于或的与num,所以我们可以在[0-num]之间进行遍历寻找,具体步骤如下:

  • 1、编写一个整数反转函数

我们需要对整数进行反转,只需要每次将整数的最后一位取出重新组成即可。

const getReverse = (num)=>{
     if(num == 0) return 0;
     let res = '';
     while(num){
        res += num % 10;
        num = Math.floor(num / 10);
     }
     return res;
 };
  • 2、遍历找到满足条件的k

[0-num]之间进行遍历寻找,判断是否满足k + reverse(k) = num

for(let i = 0; i <= num; i++){
    if(i + parseInt(getReverse(i)) == num){
        return true;
    }
}

完整AC代码如下:

AC代码

/**
 * @param {number} num
 * @return {boolean}
 */
 var sumOfNumberAndReverse = function(num) {
     const getReverse = (num)=>{
         if(num == 0) return 0;
         let res = '';
         while(num){
            res += num % 10;
            num = Math.floor(num / 10);
         }
         return res;
     };
     for(let i = 0; i <= num; i++){
         if(i + parseInt(getReverse(i)) == num){
            return true;
         }
     }
     return false;
};

说在后面

🎉这里是JYeontu,喜欢算法,GDCPC打过卡;热爱羽毛球,大运会打过酱油。毕业一年,两年前端开发经验,目前担任H5前端开发,算法业余爱好者,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。