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

这篇具有很好参考价值的文章主要介绍了整数替换(力扣)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存储值以免重复以空间换时间

代码:

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;
    }
}

整数替换(力扣)HashMap + 递归 JAVA,leetcode,java,深度优先文章来源地址https://www.toymoban.com/news/detail-615719.html

到了这里,关于整数替换(力扣)HashMap + 递归 JAVA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java | Leetcode Java题解之第13题罗马数字转整数

    题目: 题解:

    2024年04月09日
    浏览(45)
  • java 遍历目录 树 递归 控制深度 层数

    在查询数据库树结构或者目录时,通常需要控制深度,或者到第几层。 count为2时, files.listFiles()拿到的是a1,a2。 从a1进入到下一层函数,把1传进去了。files.listFiles()拿到的是b1,这里的count是1。 从a2进入到下一层函数,也是把1传进去了。files.listFiles()拿到的是b2,这里的coun

    2024年02月12日
    浏览(76)
  • 【LeetCode】剑指 Offer Ⅱ 第1章:整数(5道题) -- Java Version

    题库链接 :https://leetcode.cn/problem-list/e8X3pBZi/ 题目 解决方案 剑指 Offer II 001. 整数除法 快速除 ⭐ 剑指 Offer II 002. 二进制加法 模拟:StringBuilder ⭐ 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 动规:res[i] = res[i (i-1)] + 1 ⭐ 剑指 Offer II 004. 只出现一次的数字 位运算:按位取模

    2024年02月15日
    浏览(72)
  • 力扣(LeetCode)算法_C++——替换后的最长重复字符

    给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回包含相同字母的最长子字符串的长度。 示例 1: 输入:s = “ABAB”, k = 2 输出:4 解释:用两个’A’替换为两个’B’

    2024年02月09日
    浏览(44)
  • Java 数据结构篇-二叉树的深度优先遍历(实现:递归方式、非递归方式)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍    文章目录         1.0 二叉树的说明         1.1 二叉树的实现         2.0 二叉树的优先遍历说明         3.0 用递归方式实现二叉树遍历         3.1 用递归方式实现遍历 - 前序遍历         3.2 用递归

    2024年02月05日
    浏览(53)
  • leetcode111. 二叉树的最小深度(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/minimum-depth-of-binary-tree 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例2: 输入:

    2024年02月09日
    浏览(36)
  • Java 中的HashMap

    Java中的HashMap是一种常用的集合类,它实现了Map接口,并使用键值对的形式存储数据。下面展开介绍Java中的HashMap: 数据结构:HashMap内部使用了哈希表(Hash Table)数据结构来实现,它通过哈希函数将键映射到存储桶(Bucket)中,每个桶存储一个键值对。 键唯一性:HashMap中的

    2024年02月12日
    浏览(46)
  • Java HashMap

    Java中的HashMap是一种基于哈希表的数据结构,它可以存储键值对,其中键和值都可以是任意类型的对象。HashMap提供了快速的插入、删除和查找操作,具有高效的性能,因此在Java编程中非常常见。本文将介绍Java中的HashMap的详细信息。 哈希表的实现原理 HashMap是基于哈希表实现

    2024年02月09日
    浏览(37)
  • 详解Java HashMap

    HashMap是Map接口的实现类,基于哈希表来存储键值对。 HashMap可以存储null的key和value,可以允许多个value为null,但是只能允许一个key为null。 JDK1.8之前的HashMap底层数据结构采用 数组+链表 实现,JDK1.8之后采用 数组+链表/红黑树 实现。数组是HashMap的主体,采用拉链法(链表)解

    2024年02月08日
    浏览(45)
  • 每天一道leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(中等&图论&深度优先遍历&递归)

    给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 树中节点总数在范围 [0, 5000] 内 -1000 = Node.val = 1000 -1000 = targetSum = 1000 使用递归深度优先遍历,使用前序遍历,在遍历途

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包