397. Integer Replacement
2017-12-31 18:00
393 查看
Given a positive integer n and you can do operations as follow:
If n is even, replace n with n/2.
If n is odd, you can replace n with either n + 1 or n - 1.
What is the minimum number of replacements needed for n to become 1?
Example 1:
Example 2:
思路:
3是个特例,因为对于3来说,通过+1去掉2个1,不如-1
各种运算都要换成bit的才行,/2 %2之类的
If n is even, replace n with n/2.
If n is odd, you can replace n with either n + 1 or n - 1.
What is the minimum number of replacements needed for n to become 1?
Example 1:
Input: 8 Output: 3 Explanation: 8 -> 4 -> 2 -> 1
Example 2:
Input: 7 Output: 4 Explanation: 7 -> 8 -> 4 -> 2 -> 1 or 7 -> 6 -> 3 -> 2 -> 1
思路:
3是个特例,因为对于3来说,通过+1去掉2个1,不如-1
各种运算都要换成bit的才行,/2 %2之类的
class Solution { public int integerReplacement(int n) { int res = 0; while(n != 1) { if((n & 1) == 0) n >>>=1; else if(n == 3 || ((n>>>1) & 1) == 0) n--; else n++; res++; } return res; } }
相关文章推荐
- 397. Integer Replacement
- 397. Integer Replacement
- LeetCode 397 Integer Replacement
- 397. Integer Replacement
- Leetcode (397) Integer Replacement
- Math-397-Integer Replacement
- 397. Integer Replacement
- 397. Integer Replacement
- 397. Integer Replacement
- Integer Replacement
- Integer Replacement
- 第四周作业:Integer Replacement
- (LeetCode)Integer Replacement --- 整数替换
- integer-replacement
- Leetcode 397. Integer Replacement (Easy) (cpp)
- Integer Replacement
- Leetcode: Integer Replacement
- [LeetCode] Integer Replacement 整数替换
- LeetCode Integer Replacement
- Leetcode Integer Replacement