Iterative and Recursion Algorithms to Compute the Number of Step

  • 时间:2020-09-11 08:17:29
  • 分类:网络文摘
  • 阅读:130 次

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

Constraints:
0 <= num <= 10^6

Hints:
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) —

推荐阅读:
站长赚钱需要做什么准备工作?  个人站长做个网站赚钱真是越来越难了  网站站长赚钱的七条经验分享  一道求比例尺的问题  欧拉的故事  分羊的故事  千里马的故事  监狱里的数学研究  比和比例的历史  平均数、中位数和众数的区别 
评论列表
添加评论