刷题第二天!依旧是“数学”的简单题!希望大家都能看懂,让我们一起从小白变大神吧!
第一题: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
解题思路:
- 定义一个类Solution,包含一个公共成员函数subtractProductAndSum,接收一个整数n作为参数。
- 在函数内部,定义两个变量add_val和mul_val,分别用于存储数字各位之和和数字各位之积。
- 使用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。
- 循环结束后,返回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; // 返回乘积减去和的结果
}
};
今天到这里就结束啦~我们明天再见!希望看到这篇文章的你能够和我一起学习行动起来哟!明天再见啦!