397.leetcode Integer Replacement(easy)[数字处理 溢出]
2016-10-07 21:11
337 查看
Given a positive integer n and you can do operations as follow:
If n is even, replace n with
If n is odd, you can replace n with either
What is the minimum number of replacements needed for n to become 1?
Example 1:
Example 2:
解法一采用传统的函数递归处理
解法二通过观察发现除了3以外其他+1是4的倍数的数都采用加一得到的次数更小
class Solution {
public:
解法一:递归迭代
If n is even, replace n with
n/2.
If n is odd, you can replace n with either
n + 1or
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以外其他+1是4的倍数的数都采用加一得到的次数更小
class Solution {
public:
解法一:递归迭代
int getResult(int n) { if(n == 1) return 0; int count = 0; if(n%2 == 0) { n = n>>1; ++count; count += getResult(n); }else { ++count; long long t = n; int a = getResult((t-1)/2); int b = getResult((t+1)/2); ++count; count += a>b?b:a; } return count; } int integerReplacement(int n) { if(n<=1) return 0; return getResult(n); }
解法二总结算法 int integerReplacement(int n) { long long t = n; int count = 0; while (t > 1) { ++count; if (t & 1) { if ((t & 2) && (t != 3)) ++t; else --t; } else { t >>= 1; } } return count; } };
相关文章推荐
- 处理大数字BigInteger与BigDecimal
- LeetCode Reverse Integer (处理溢出)
- JAVA中大数字的的处理:BigInteger和BigDecimal
- 7 Reverse Integer(数字反转Easy)
- 处理大数字BigInteger与BigDecimal
- 《LeetBook》leetcode题解(7): Reverse Integer[E]——处理溢出的技巧
- LeetCode7——Reverse Integer(将一个整数反转,注意溢出的处理)
- LeetCode 7. Reverse Integer 关于溢出很好的理解和处理
- LeetCode-67-Add Binary(数字/字符串处理)-Easy
- Leetcode 397. Integer Replacement (Easy) (cpp)
- C# BigInteger 处理超大整型数字
- 处理大数字BigInteger与BigDecimal
- 处理大数字BigInteger与BigDecimal
- html标签内容为纯英文字符或数字时的溢出处理
- 算法中可以使用不等式变换避免溢出,leetcode:Sqrt(x) ,BigInteger处理溢出
- (10.31)反转一个整数数字,输入为32位signed integer。反转后溢出则返回 0 。
- [LeetCode 7]Reverse Integer(处理整数溢出)
- Java数字、货币值和百分数等的格式化处理
- Java数字、货币值和百分数等的格式化处理
- 中英文数字混合的复合格式处理