今天开始刷力扣题目,在这里分享一下自己的思路和代码。
由于是小白,所以从最简单做起~
————————————————————————————————————————————————
题目如下:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ca3001f67d430b9fd44dc7ab8c818867.png)
我自己的做法:
class Solution {
public int sn(int number) {
int n = 0; // 定义次数
int mod = 0;// 定义余数
while (number != 1) {// 当number为1时退出循环
mod = number % 2;
/*
* 对number取余,判断是否是偶数,偶数就次数自增1,奇数则增2(奇数需要减1,再除2,需要进行2步)
*/
if (mod == 0) {
n++;
} else if (mod != 0) {
number = number - 1;
n = n + 2;
}
number = number / 2;// number除2
}
n++;// 当跳出循环时,number为1,还需要多一步才能变为0
return n;// 返回number
}
}
(思路已经在注释里了)
这是最优解的答案:
方法一:迭代
public int numberOfSteps(int num) {
int step = 0; //记录步数
while (num > 0) {
if ((num & 1) == 0) {//num为偶数
num >>= 1;
}
else { //num为奇数
num &= ~1; //等价于 num ^= 1
}
step++;
}
return step;
}
作者:peter_pan
链接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero/solution/he-xin-qi-ou-pan-duan-he-zi-jian-you-hua-die-dai-d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法二:递归
public int numberOfSteps1(int num) {
if(num == 0)
return 0;
if((num & 1) == 0) { // num为偶数
return numberOfSteps1(num >>> 1) + 1;
}
else { // num为奇数
return numberOfSteps1(num - 1) + 1;
}
}
作者:peter_pan
链接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero/solution/he-xin-qi-ou-pan-duan-he-zi-jian-you-hua-die-dai-d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。