将数字变成0的操作次数
程序员文章站
2024-03-23 22:23:16
...
今天开始刷力扣题目,在这里分享一下自己的思路和代码。
由于是小白,所以从最简单做起~
————————————————————————————————————————————————
题目如下:
我自己的做法:
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
推荐阅读
-
将数字变成0的操作次数
-
编写一个函数 reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
-
编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
-
Excel输入大写数字将小写的数字全部变成严格的大写金额
-
Excel输入大写数字将小写的数字全部变成严格的大写金额
-
wps表格输入以0为开头的数字(001)会直接变成1
-
在命令行任意输入一组数字(0~9),然后统计这组数据中每个数字出现的个数,然后将统计个数逆序输出
-
Word操作技巧之将字符串中的文字与数字分离字母与数字分离
-
如何将一个字符串中的所有非数字(0-9及小数点)字符全部除去_MySQL
-
将数组的数字复制并将负数改变成正数(汇编)