leetcode397.Integer Replacement 发表于 2019-02-04 更新于 2024-08-18 分类于 面试 , leetcode 题目要求12345678910111213141516171819202122232425262728Given 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:8Output:3Explanation:8 -> 4 -> 2 -> 1Example 2:Input:7Output:4Explanation:7 -> 8 -> 4 -> 2 -> 1or7 -> 6 -> 3 -> 2 -> 1 思路和代码可以发现除二后所得到的结果一定优于加减1。因此,如果当前奇数除二为偶数,则直接做除法,否则将当前奇数加一再除以二,得到偶数的结果。 12345678910111213141516public 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;}