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; }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~微信