该题是easy,比较简单,我用的是常规的方法,看到了一行实现的大神。。。
题目相关
【题目解读】
给定一个数(0~
1
0
6
10^6
106),判断该数经过减1 或 除2
操作到达0所需要的步数。
【原题描述】原题链接
Given a non-negative integer num, return the number of steps to reduce it to zero. If the current number is even, you have to divide it by 2, otherwise, you have to subtract 1 from it.
Example 1:
Input: num = 14
Output: 6
Explanation:
Step 1) 14 is even; divide by 2 and obtain 7.
Step 2) 7 is odd; subtract 1 and obtain 6.
Step 3) 6 is even; divide by 2 and obtain 3.
Step 4) 3 is odd; subtract 1 and obtain 2.
Step 5) 2 is even; divide by 2 and obtain 1.
Step 6) 1 is odd; subtract 1 and obtain 0.
Example 2:
Input: num = 8
Output: 4
Explanation:
Step 1) 8 is even; divide by 2 and obtain 4.
Step 2) 4 is even; divide by 2 and obtain 2.
Step 3) 2 is even; divide by 2 and obtain 1.
Step 4) 1 is odd; subtract 1 and obtain 0.
Example 3:
Input: num = 123
Output: 12
【难度】Easy
Solution
比较简单,直接判断下当前是否是奇数,如果是奇数进行减一操作,是偶数直接除2。
代码如下,做不到大神那样1行代码搞定,自己下来也需要6行代码。
class Solution {
public:
int numberOfSteps (int num) {
int step = 0;
while(num != 0)
{
if(num %2 == 1) num -= 1;
else num /=2;
step++;
}
return step;
}
};
![](https://i-blog.csdnimg.cn/blog_migrate/7a552479738ae5f16476d9386bb5bafd.png)