zoukankan      html  css  js  c++  java
  • Leetcode 397 整数替换

    地址 https://leetcode-cn.com/problems/integer-replacement/

    给定一个正整数 n,你可以做如下操作:
    
    1. 如果 n 是偶数,则用 n / 2替换 n。
    2. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n。
    n 变为 1 所需的最小替换次数是多少?
    
    示例 1:
    
    输入:
    8
    
    输出:
    3
    
    解释:
    8 -> 4 -> 2 -> 1
    示例 2:
    
    输入:
    7
    
    输出:
    4
    
    解释:
    7 -> 8 -> 4 -> 2 -> 17 -> 6 -> 3 -> 2 -> 1

    解答

    目前就是 暴力dfs。

    其实可以反过来想,1经过加倍和加1减1 如何经过最小操作得到指定数字

    暴力代码如下

    class Solution {
    public:
        int dfs(long long  n )
        {
            if(n==1) return 0;
             if(n%2 == 0){
                 cout << 0 << endl;
                return dfs(n>>1)+1;        
             }else{
                 cout << 1<< endl;
                 //单数
                int ret = min(dfs(n+1),dfs(n-1));
                return ret+1;
             }
        }
        int integerReplacement(int n) {
            return dfs(n);
        }
    };

     添加哈希 做了记忆化 加速效果明显

    class Solution {
    public:
        unordered_map<long long , int> memo;
        int dfs(long long  n )
        {
            if (memo.count(n)) return memo[n];
            if(n==1) return 0;
             if(n%2 == 0){
                int ret =  dfs(n>>1); 
                memo[n] = ret+1;
                return ret+1;
             }else{
                 //单数
                int ret = min(dfs(n+1),dfs(n-1));
                memo[n] = ret+1;
                return ret+1;
             }
        }
        int integerReplacement(int n) {
            int res = dfs(n);
            memo[n] = res;
            return res;
        }
    };

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    .Spring事务管理
    什么叫事务;什么叫业务逻辑;什么叫持久化
    Hibernate基本应用01
    Maven整理
    责任链模式和观察者模式
    SpringBoot基础入门
    反射总结
    多线程
    IO流
    File类总结
  • 原文地址:https://www.cnblogs.com/itdef/p/13081569.html
Copyright © 2011-2022 走看看