【LeetCode】力扣刷题记录第二天

刷题第二天!依旧是“数学”的简单题!希望大家都能看懂,让我们一起从小白变大神吧!

第一题:LeetCode2520

解题思路:直接计算出给出数字的每一位,然后看其是否能被该数字整除即可。

class Solution {
public:
    int countDigits(int num) {
       int numBak=num;//备份原始数字以便后续计算
       int count=0;//初始化计数器
       while(num){
        int lastNum=num%10;//获取num的个位数
        num/=10;//去掉个位数
        if(!lastNum)
        {
            continue;
        }
        if(numBak%lastNum==0)//若原始数字能被个位数整除,计数器加1
        {
            ++count;
        }
       } 
       return count;//返回计数器的值
    }
};

第二题: LeetCode1688

解题思路:

1. 基本情况:如果 'n' 是0或1,那么不需要任何比赛(因为没有足够的选手或者只有一个选手),所以返回0。

2. 递归情况:
   如果 'n' 是偶数,那么每场比赛都会消耗两只队伍,因此可以进行 'n / 2' 场比赛,然后对剩余的队伍数(即 'n / 2')递归调用 'helper' 函数。
   如果 'n' 是奇数,那么会有一个选手在第一轮没有对手,因此先进行 '(n - 1) / 2' 场比赛,剩下的队伍数为 '(n + 1) / 2'(因为有一个选手直接晋级),然后对这个结果递归调用 'helper' 函数。

class Solution {
public:
    int numberOfMatches(int n) {//定义函数numberOfMatches,接收参数整数n
        return helper(n);//调用helper函数并返回结果
    }
    int helper(int n){
        if(n==0||n==1)//n为0或1,无比赛直接返回0
        return 0;
        if(n%2==0)//n为偶数
        {
            return n/2+helper(n/2);// 返回n的一半加上递归调用helper函数的结果,传入的参数为n的一半
        }
        else{//n为奇数
            return (n-1)/2+helper((n+1)/2);// 返回(n-1)/2加上递归调用helper函数的结果,传入的参数为(n+1)/2
        }
        return 0;
    }
};

第三题:LeetCode1281

 解题思路:

  1. 定义一个类Solution,包含一个公共成员函数subtractProductAndSum,接收一个整数n作为参数。
  2. 在函数内部,定义两个变量add_val和mul_val,分别用于存储数字各位之和和数字各位之积。
  3. 使用while循环,当n不为0时,执行以下操作: a. 计算n的个位数cur,即n % 10。 b. 更新n的值,去掉个位数,即n /= 10。 c. 将cur加到add_val上,即add_val += cur。 d. 将cur乘到mul_val上,即mul_val *= cur。
  4. 循环结束后,返回mul_val减去add_val的结果。
class Solution {
public:
    int subtractProductAndSum(int n) {
        int add_val = 0; // 初始化加法结果为0
        int mul_val = 1; // 初始化乘法结果为1
        while (n) { // 当n不为0时,继续循环
            int cur = n % 10; // 取n的个位数
            n /= 10; // 去掉n的个位数
            add_val += cur; // 将当前位的数字加到add_val上
            mul_val *= cur; // 将当前位的数字乘到mul_val上
        }
        return mul_val - add_val; // 返回乘积减去和的结果
    }
};

 今天到这里就结束啦~我们明天再见!希望看到这篇文章的你能够和我一起学习行动起来哟!明天再见啦!

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值