LeetCode: Number of steps to reduce a number to zero C# https://leetcode.com/problems/number-of-steps-to-reduce-a-number-to-zero/


  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 &lt;= num &lt;= 10^6


  public int NumberOfSteps (int num) {
        int count = 0;
         while( num !=0)
         {
             if(num %2==0)
             {
                 num = num/2;
                 count++;
             }
             else
             {
                 if( num == 1)
                 {
                     return count+1;
                 }
                 num = num-1;
                 count++;
             }             
         }
         return count;
    }


Please review for performance
Not much to say for such a simple algorithm.  However there is an optimization that you could employ.  Check for odd instead of even, then convert to even.  Then divide by 2.  At most this cuts your iterations by half.

It would look like this:

public int NumberOfSteps(int num)
{
    int count = 0;
    while (num != 0)
    {
        if(num % 2 == 1)
        {
            num -= 1;
            ++count;
        }
        if(num &gt; 0)
        {
            num /= 2;
            ++count;
        }
    }
    return count;
}