Problem: 1342. 将数字变成 0 的操作次数
思路
两种方法
解题方法
第一种:二进制判断是否为奇数,然后在后面添加条件及运行的结果。
用位运算
这个二进制的最低位是1就是奇数,是0就是偶数
因为二进制的位数(由低到高)分别代表着1,2,4,8,16,32,64,128,256,512,1024.
只有最低位的这个是1或0
所以二进制最低位为1时,就是奇数判断一个数是奇数还是偶数:
1、只需判断最后一位是1还是0
2、最后一位是1,说明是奇数。最后一位是0,说明是偶数
3、因为只有2的0次方才是奇数值1,其他的2的k(k = 1,2,….)都是偶数
num = ((num & 1) == 1) ?
第二种就很简单了,直接用循环就行。
复杂度
- 时间复杂度:
O(lognum)
- 空间复杂度:
O(1)
Code
Java
class Solution {
public int numberOfSteps(int num) {
int numberOfSteps= 0;
while (num > 0) {
++numberOfSteps;
num = ((num & 1) == 1) ? num - 1 : num / 2;
}
return numberOfSteps;
}
}
Java
class Solution {
public int numberOfSteps(int num) {
int numberOfSteps=0;
while(num>0)
{
if(num%2==0&&num>0){
num=num/=2;
numberOfSteps+=1;
}
else if(num%2==1&&num>0){
num=num-1;
numberOfSteps+=1;
}
}
return numberOfSteps;
}
}