一、问题链接:
https://leetcode.com/problems/integer-replacement/description/
二、思路:
对偶数直接除二
对奇数进行加一或者减一的操作。
1、刚开始想的比较简单,全部加一。发现部分测试用例未过
2、然后就发现,加一或者减一是需要来进行选择的操作,进行加一之后的数字如果能够被四整除,则倾向于加一。
3、进行如上两步操作之后还是有些case未通过,查看一下发现是数字3的独特性,故单独处理即可。
三、编码:
a、
int output = 0;
if (n == 1) {
return output;
}
while (n != 1) {
++output;
n = n % 2 == 0 ? n / 2 : ((n - 1) / 4 == 0 ? n - 1 : n + 1);
}
return output;
}
b、老样子,需要考虑int范围问题,转为大范围来进行
int output = 0;
long na = n;
if (na == 1) {
return output;
}
while (na != 1) {
System.out.println(na + " " + output);
++output;
na = na % 2 == 0 ? na / 2 : ((na == 3 || ((na >>> 1) & 1) == 0) ? na - 1 : na + 1);
}