「这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战」
相关文章
LeetCode刷题汇总:LeetCode刷题
一、题目描述
给你一个非负整数
num
,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
二、思路分析
- 看看题目的示例,我们来理一理这个思路~
- 示例 1:
1 | ini复制代码输入:num = 14 |
- 示例2:
1 | ini复制代码输入:num = 8 |
- 示例3:
1 | ini复制代码输入:num = 123 |
- 说明
+ 思维定势了我,第一反应就是直接暴力来干就完事儿了!
+ 首先,定义中间数`temp`暂存计算完次数的,每次计算完改变传入的nums的值,一直循环。
+ 里面增加判断奇数偶数即可。
+ 话不多说,直接看代码。
三、AC 代码
- 暴力破解:
1 | dart复制代码class Solution { |
- 执行结果:
- 位运算:
+ 都说计算机最快的计算方式是`位运算`
+ 那么我们思路不变,把所有的判断还有计算变成位运算,是不是更`nice`了呀!
+ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dart复制代码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
本文转载自: 掘金