1342. 将数字变成 0 的操作次数

110 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情 难度:简单

需求描述

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

提示:

  • 0 <= num <= 10^6

示例

  • 输入:num = 14
  • 输出:6
  • 解释:
  1. 步骤 1) 14 是偶数,除以 2 得到 7 。
  2. 步骤 2) 7 是奇数,减 1 得到 6 。
  3. 步骤 3) 6 是偶数,除以 2 得到 3 。
  4. 步骤 4) 3 是奇数,减 1 得到 2 。
  5. 步骤 5) 2 是偶数,除以 2 得到 1 。
  6. 步骤 6) 1 是奇数,减 1 得到 0 。

题解

/**
 * @param {number} num
 * @return {number}
 */
  
var numberOfSteps = function(num) {
  let setp = 0; 
  while(num > 0){
    if(num % 2 === 0) {
      num /= 2
    } else {
      num-=1
    }
    setp += 1;
  }
  return setp;
};

思路

  1. 如果是偶数,除以2。js中通过%2,来判断是否是偶数
  2. 如果是基数,减1,
  3. 定义一个变量记录步长

总结

在这里还有更优的解法,通过位运算来计算。但是我还没能掌握位运算,这是一个短板,后续会学习补充上。

参考

来源:力扣(LeetCode)

链接:leetcode.cn/problems/nu…