解题思路
通过题意可以知道,步数等于num的二进制的总位数+1的位数-1
因为要转化为相应的结果,当我们遇到1需要两步转化(先减一,转化为0再左移),遇到0需要一步转化
而最高位的1只需要一步,所以要减去1
可以先把num转化为二进制求出相应的位数,再利用布莱恩算法,求出num中1的位数 相加后减一
代码
/**
- @param {number} num
- @return {number}
*/
var numberOfSteps = function(num) {
// 先把num转化为二进制求出相应的位数
let n=num.toString(2).length;
// 再利用布莱恩算法,求出num中1的位数
while(num){num=num&num-1;n++;}
// 相加后减一
return n-1;
};