[LeetCode-1342]Number of Steps to Reduce a Number to Zero

本文解析了一个简单算法问题,即如何通过减1或除2操作将任意非负整数减少至零,并记录所需步骤。通过实例展示了不同输入值的操作流程,提供了易于理解的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该题是easy,比较简单,我用的是常规的方法,看到了一行实现的大神。。。

文章目录

题目相关

【题目解读】
给定一个数(0~ 1 0 6 10^6 106),判断该数经过减1 或 除2操作到达0所需要的步数。

【原题描述】原题链接
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

【难度】Easy

Solution

比较简单,直接判断下当前是否是奇数,如果是奇数进行减一操作,是偶数直接除2。
代码如下,做不到大神那样1行代码搞定,自己下来也需要6行代码。

class Solution {
public:
    int numberOfSteps (int num) {
        int step = 0;
        while(num != 0)
        {
            if(num %2 == 1) num -= 1;
            else num /=2;
            
            step++;
        }
        
        return step;
        
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值