classSolution: defminOperations(self, n: int) -> int: ans = 1 while n & (n - 1): # 不是 2 的幂次 lb = n & -n if n & (lb << 1): n += lb # 多个连续 1 else: n -= lb # 单个 1 ans += 1 return ans
[sol2-Java]
1 2 3 4 5 6 7 8 9 10 11 12
classSolution { publicintminOperations(int n) { intans=1; while ((n & (n - 1)) > 0) { // n 不是 2 的幂次 intlb= n & -n; if ((n & (lb << 1)) > 0) n += lb; // 多个连续 1 else n -= lb; // 单个 1 ++ans; } return ans; } }
[sol2-C++]
1 2 3 4 5 6 7 8 9 10 11 12 13
classSolution { public: intminOperations(int n){ int ans = 1; while (n & (n - 1)) { // n 不是 2 的幂次 int lb = n & -n; if (n & (lb << 1)) n += lb; // 多个连续 1 else n -= lb; // 单个 1 ++ans; } return ans; } };
[sol2-Go]
1 2 3 4 5 6 7 8 9 10 11 12 13
funcminOperations(n int)int { ans := 1 for n&(n-1) > 0 { // n 不是 2 的幂次 lb := n & -n if n&(lb<<1) > 0 { // 多个连续 1 n += lb } else { n -= lb // 单个 1 } ans++ } return ans }
funcminOperations(n int)int { if n&(n-1) == 0 { // n 是 2 的幂次 return1 } if res, ok := cache[n]; ok { return res } lb := n & -n res := 1 + min(minOperations(n+lb), minOperations(n-lb)) cache[n] = res return res }
funcmin(a, b int)int { if a > b { return b }; return a }