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
能够发现除二后所获得的结果必定优于加减1。所以,若是当前奇数除二为偶数,则直接作除法,不然将当前奇数加一再除以二,获得偶数的结果。面试
public int integerReplacement(int n) { int count = 0; while(n != 1){ if((n & 1) == 0){ n >>>= 1; } else if(n == 3 || ((n>>>1) & 1) == 0){ n--; } else{ n++; } count++; } return count; }
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~微信