给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
根据题目写一个循环就行了,如果追求效率,可以将相应的运算转为位运算,即对2取余等价于与1相与;除2等价于右移1位;减1等价于与-2相与。
class Solution { public: int numberOfSteps(int num) { int res = 0; while (num != 0) { if (num % 2 == 0) { num /= 2; } else { num -= 1; } res += 1; } return res; } };