Iterative and Recursion Algorithms to Compute the Number of Step
- 时间:2020-09-11 08:17:29
- 分类:网络文摘
- 阅读:133 次
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: 6Explanation:
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: 12Constraints:
0 <= num <= 10^6Hints:
Simulate the process to get the final answer.
Iterative Approach
We can simulate the process until we make the number zero (simple, intuitive and effective).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution { public: int numberOfSteps (int num) { int r = 0; while (num != 0) { r ++; if (num % 2 == 0) { num >>= 1; } else { num --; } } return r; } }; |
class Solution {
public:
int numberOfSteps (int num) {
int r = 0;
while (num != 0) {
r ++;
if (num % 2 == 0) {
num >>= 1;
} else {
num --;
}
}
return r;
}
};Recursive Algorithm
Alternatively, we can do this recursively but this approach is at the risk of stack-overflow.
1 2 3 4 5 6 7 | class Solution { public: int numberOfSteps (int num) { return num == 0 ? 0 : 1 + numberOfSteps(num % 2 == 0 ? num / 2 : num - 1); } }; |
class Solution {
public:
int numberOfSteps (int num) {
return num == 0 ? 0 : 1 +
numberOfSteps(num % 2 == 0 ? num / 2 : num - 1);
}
};–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:网站权重如何提升,掌握以下几点快速提权 SEO关键词排名该掌握的核心优化技巧 为何网站内容稳定更新还没有关键词排名? 图中阴影部分面积是多少平方厘米 梯形ABCD的面积是多少平方厘米 某校一年级同学平均身高是115厘米 若这稿件由乙完成,需要几小时? 从上边剪下一块直径是80厘米的圆片 甲乙丙三个修路队共同修完一条公路 最多可做多少面小三角旗
- 评论列表
-
- 添加评论