整数变换成1

题目:n是偶数时变成n/2,n是奇数时变成n-1或n+1,最终变成1。怎样使替换操作最少?

int integerReplacement(int n) {
    if (n == INT_MAX) return 32; // n=2^31-1
    
    // n为奇数时到底往上n+1还是往下n-1?选下下步是偶数的那个。
    // 设n=2k+1 (k>=0),有n-1=2k、n+1=2(k+1),下下步的k和k+1一奇一偶。
    // k是偶数时,(n-1)%4==0,选n-1分支;否则,选n+1分支。
    // 特例是n==3时选n-1分支要2步、选n+1分支要3步,选n-1分支。
    int count = 0;
    while (n > 1) {
        if (n % 2 == 0) {
            n /= 2;
        } else {
            if ((n - 1) % 4 == 0 || n == 3) {
                n--;
            } else {
                n++;
            }
        }
        count++;
    }
    return count;
}