Iterative and Recursion Algorithms to Compute the Number of Step

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

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

推荐阅读:
解决wordpress自动更新失败无法进入后台的方法及升级失败原因  通过.htaccess限制访问IP 保护wordpress后台安全  第一次坐公交车作文100字  人生思考作文800字  上海东方明珠塔作文400字  冬日趣事作文100字  妈妈母亲节快乐作文300字  光辉的转折作文900字  金钟水库作文400字  三下乡之山雨欲来无征兆 
评论列表
添加评论