题意是给一个整数,给了如下运算规则,如果是偶数可以除以2;如果是奇数可以+1或-1。问最少需要几步操作可以得到1。
这题的tag给的是位运算,但是我没有实现出来。有哪位朋友实现了JS位运算的做法,欢迎留言。这题我只会用递归实现。
时间O(n)
空间O(n)
1 /** 2 * @param {number} n 3 * @return {number} 4 */ 5 var integerReplacement = function(n, memo = {}) { 6 if (n === 1) return 0; 7 if (memo[n]) return memo[n]; 8 memo[n] = 9 n % 2 === 0 10 ? integerReplacement(n / 2, memo) + 1 11 : Math.min(integerReplacement(n + 1, memo), integerReplacement(n - 1, memo)) + 1; 12 return memo[n]; 13 };