整数替换(力扣)HashMap + 递归 JAVA

给定一个正整数 n ,你可以做如下操作:

如果 n 是偶数,则用 n / 2替换 n 。 如果 n 是奇数,则可以用 n + 1或n - 1替换 n 。 返回 n 变为 1 所需的

最小替换次数 。

示例 1:

输入:n = 8

输出:3

解释:8 -> 4 -> 2 -> 1

示例 2:

输入:n = 7

输出:4

解释:7 -> 8 -> 4 -> 2 -> 1 或 7 -> 6 -> 3 -> 2 -> 1

示例 3:

输入:n = 4

输出:2

提示:

1 <= n <= 2^31 - 1

解题思路:

1、如果n 为偶数那就只有/2一种选项

2、如果n为奇数那么有 + 1和 - 1两种选择,这里用long因为2^31 - 1 + 1会爆掉int

3、利用HashMap存储值以免重复以空间换时间

代码:

java 复制代码
class Solution {
	Map<Long, Integer> map = new HashMap<>();
    public int integerReplacement(int n) {
          return dfs(n * 1L);
    }
    public int dfs(long n) {
    	if(n == 1) return 0;
    	if(map.containsKey(n)) return map.get(n);//先查看是否存储有
    	int ans = n % 2 == 0 ? dfs(n / 2) : Math.min(dfs(n + 1), dfs(n - 1));//开始存入
    	map.put(n, ++ ans);//记得是先变到n/2或n + 1 或 n - 1的状态所以需要 + 1
    	return ans;
    }
}
相关推荐
神经毒素12 分钟前
WEB安全--Java安全--shiro550反序列化漏洞
java·安全·web安全·shiro
hnlucky25 分钟前
Windows 上安装下载并配置 Apache Maven
java·hadoop·windows·学习·maven·apache
Dream it possible!1 小时前
LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)
c++·leetcode·哈希算法
forestsea2 小时前
Maven 插件扩展点与自定义生命周期
java·maven
医只鸡腿子2 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发
keke102 小时前
Java【14_2】接口(Comparable和Comparator)、内部类
java·开发语言
CN.LG3 小时前
Java 乘号来重复字符串的功能
java·开发语言
萌新下岸多多关照3 小时前
Java中synchronized 关键字
java·开发语言
中国lanwp3 小时前
使用Maven部署WebLogic应用
java·maven
开开心心就好3 小时前
Word图片格式调整与转换工具
java·javascript·spring·eclipse·pdf·word·excel