当前位置:网站首页>算法---整数替换(Kotlin)
算法---整数替换(Kotlin)
2022-08-09 23:31:00 【小米科技Android 研发曹新雨】
题目
给定一个正整数 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 <= 231 - 1
解决思路
1.按照题目思路 直接递归求解
2.添加记忆化 防止重复运算
解决方法
方法1:
fun integerReplacementV2(n: Int): Int {
if (n == 1) return 0
return if (n % 2 != 0) {
2 + integerReplacement(n / 2 + 1).coerceAtMost(integerReplacement(n / 2))
} else{
1 + integerReplacement(n / 2)
}
}
方法2:
var map = HashMap<Int,Int>()
fun integerReplacement(n: Int): Int {
if (n == 1) return 0
if (!map.containsKey(n)){
if (n % 2 != 0) {
map[n] = 2 + integerReplacement(n / 2 + 1).coerceAtMost(integerReplacement(n / 2))
} else if (n != 1) {
map[n] = 1 + integerReplacement(n / 2)
}
}
return map[n]!!
}
总结
1.注意这个边界情况 不然产生了负数 可以一直除下去 导致stackOverFlow
2.官方题解还有一种方法 不过太过于难于理解
我不希望真实项目中存在那种写法 可读性和可维护性太差
边栏推荐
- 漫谈缺陷管理的自动化实践方案
- 解锁时间生成与比较
- 使用C语言实现静态链表
- E - Sugoroku 3(期望dp)
- 生成树和交换的总结
- Description of AirFlow
- Project (7) - PolarSeg point cloud semantic segmentation
- Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
- 今日睡眠质量记录61分
- Redis-基本介绍/linux下环境配置/配置文件
猜你喜欢
随机推荐
RebatMq消息中间件(一) 各个中间件介绍
AppUser object extension based on ABP
上交所实时行情文件汇总
断开和服务器共享连接的方法「建议收藏」
拼多多店铺运营不得不知的留个运营小知识
Spark基础【RDD单Value类型转换算子】
C语言学习之旅 【操作符(残缺版)】
MATLB|和她跌宕起伏最终到达人生之峰【浪漫旅途】
EL表达式
deepstream学习笔记(三):deepstream-imagedata-multistream解析与接入适配yolov5模型测试
【集训DAY5】选数字【数学】
【集训DAY5】堆箱子【数学】
程序员从佩洛西窜访事件中可以学到什么?
【渗透工具】浏览器数据导出工具
错误提示:Syntax error on token “function”, delete this token
生成树和交换的总结
Pinduoduo store operation must know to leave a little knowledge of operation
2022中高级Android面试题汇总来助你通过面试
什么是服务治理
第十二,十三章 mysql数据类型,视图的课后练习