zoukankan      html  css  js  c++  java
  • LeetCode-Integer Replacement

    Given a positive integer n and you can do operations as follow:

    1. If n is even, replace n with n/2.
    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

    Solution:
    public class Solution {
        public int integerReplacement(int n) {
            if (n<1) return -1;
            
            int steps = 0;
            while (n!=1){
                if (n%2==0){
                    n /= 2;
                } else {
                    // We have: steps(2x) <= steps(2x-1) && steps(2x) <= steps(2x+1),i.e.,
                    // for odd number, we go to (n-1) if (n-1)/2 is an even number. 
                    // IMPORTANT: the only exception is n=3, for which we should choose n-1,because (n-1)/2 is 1 directly.
                    // NOTE: We need take care of n==Integer.MAX_VALUE, in which we cannot perform n+1.
                    if (n==Integer.MAX_VALUE){
                        n = n/2+1;
                        steps++;
                    } else if (((n-1)/2)%2==0 || (n-1)/2==1){
                        n = n-1;
                    } else {
                        n = n+1;
                    }
                }
                steps++;
            }
            return steps;
        }
    }

  • 相关阅读:
    mysql的权限定义
    数据库的启动流程和关闭介绍/mysql初始化配置文件
    SQL 执行顺序
    AJAX 同步请求锁浏览器
    JSON
    Json.NET
    JSON.parse()和JSON.stringify()
    the XMLHttpRequest Object
    命名方式
    varchar 和 nvarchar 的区别和使用
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5867232.html
Copyright © 2011-2022 走看看