「这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战」
相关文章
LeetCode刷题汇总:LeetCode刷题
一、题目描述
给你一个非负整数
num
,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
二、思路分析
-
看看题目的示例,我们来理一理这个思路~
-
示例 1:
输入:num = 14 输出:6 解释: 步骤 1) 14 是偶数,除以 2 得到 7 。 步骤 2) 7 是奇数,减 1 得到 6 。 步骤 3) 6 是偶数,除以 2 得到 3 。 步骤 4) 3 是奇数,减 1 得到 2 。 步骤 5) 2 是偶数,除以 2 得到 1 。 步骤 6) 1 是奇数,减 1 得到 0 。
-
示例2:
输入:num = 8 输出:4 解释: 步骤 1) 8 是偶数,除以 2 得到 4 。 步骤 2) 4 是偶数,除以 2 得到 2 。 步骤 3) 2 是偶数,除以 2 得到 1 。 步骤 4) 1 是奇数,减 1 得到 0 。
-
示例3:
输入:num = 123 输出:12
-
说明
- 思维定势了我,第一反应就是直接暴力来干就完事儿了!
- 首先,定义中间数
temp
暂存计算完次数的,每次计算完改变传入的nums的值,一直循环。 - 里面增加判断奇数偶数即可。
- 话不多说,直接看代码。
三、AC 代码
- 暴力破解:
class Solution {
public int numberOfSteps(int num) {
int temp = 0;
while(num != 0){
if(num % 2 == 0){
num /= 2;
}else{
num -= 1;
}
temp++;
}
return temp;
}
}
- 执行结果:
-
位运算:
- 都说计算机最快的计算方式是
位运算
- 那么我们思路不变,把所有的判断还有计算变成位运算,是不是更
nice
了呀! -
class Solution { public int numberOfSteps(int num) { int temp = 0; while(num != 0){ //判断当前数的奇偶性 if((num & 1) == 0){ num = num >> 1; }else{ num = num ^ 1; } temp++; } return temp; } }
- 执行结果:
- 都说计算机最快的计算方式是
-
实话实说,这题,是LeetCode上第三好解的题目!
-
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah