您的位置:首页 > 其它

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 
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以外其他+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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: