Iterative and Recursion Algorithms to Compute the Number of Step

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

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

推荐阅读:
这个学校春游的学生有多少人  它们将于几时几分在途中再次相遇  AB两地的路程是550千米  李叔叔从家骑车去横溪办事  两车相遇时间是什么时候  求AB两站的路程  小玲和小聪收集各种卡片  三种水果共有多少千克  汽车比原计划早到1.5小时到达目的地  果园里有桔子树和梨树共360棵 
评论列表
添加评论