397. 整数替换 (Medium
问题描述
给定一个正整数 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³¹ - 1
解题思路
贪心的思想。这里只需要讨论n为奇数的情况,如果n为奇数,那么n + 1和n - 1必然有一个能被4整除,如果(n + 1) % 4 == 0,那么n = n + 1,否则n = n - 1,注意3是例外。
代码
class Solution {
public:
int integerReplacement(int n) {
int cnt = 0;
while (n != 1) {
while ((n & 1) == 0) { // n为偶数
n >>= 1; // 相当于除以2
cnt++;
}
if (n == 1) {
return cnt;
}
if (n == 3)
return cnt + 2;
if ((n + 1) & 3 == 0) { // n能被4整除
n += 1;
cnt++;
} else {
n -= 1;
cnt++;
}
}
return cnt;
}
};
397. 整数替换 (Medium的更多相关文章
- Java实现 LeetCode 397 整数替换
397. 整数替换 给定一个正整数 n,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n. n 变为 1 所需的最小替换次数 ...
- Leetcode 397.整数替换
整数替换 给定一个正整数 n,你可以做如下操作: 1. 如果 n 是偶数,则用 n / 2替换 n.2. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n.n 变为 1 所需的最小替换次数是 ...
- 397 Integer Replacement 整数替换
给定一个正整数 n,你可以做如下操作:1. 如果 n 是偶数,则用 n / 2替换 n.2. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n.n 变为 1 所需的最小替换次数是多少?示例 ...
- [LeetCode] Integer Replacement 整数替换
Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If ...
- [Swift]LeetCode397. 整数替换 | Integer Replacement
Given a positive integer n and you can do operations as follow: If n is even, replace n with n/2. If ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- C#LeetCode刷题-位运算
位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 ...
- C#LeetCode刷题-数学
数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 ...
- Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数
dual单行单列的隐藏表,看不见 但是可以用,经常用来调内置函数.不用新建表 时间函数 sysdate 系统当前时间 add_months 作用:对日期的月份进行加减 写法:add_months(日期 ...
- Visual studio 使用正则表达查找替换
原文 http://www.cnblogs.com/shineqiujuan/archive/2012/07/04/2575535.html 正则表达式是查找和替换文本模式的一种简洁而灵活的表示法. ...
随机推荐
- 阿里播放器Aliplayer遇到的所有坑
1,关于阿里播放器使用过的几种播放方式 url (source) ① 要在创建播放器前要拿到资源否则会报错 ② 在有不同清晰度的资源时 直接调用 player.loadByUrl() 方法会报错 官 ...
- git---全局设置用户名、密码、邮箱
# git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址. # 1.查看git配置信息 $ ...
- dp-状压dp
https://www.bilibili.com/video/BV1Z4411x7Kw?from=search&seid=13855865082722302053 状压介绍: 状态表示: 转移 ...
- gitlab 搭建代理踩坑
公司的外网服务被黑客攻击,所以需要重置服务器 -- 此为前提 gitlab 的安装 网上找吧. 迁移前置条件 1. 迁移备份 gitlab 时,需要确保双方服务器的gitlab 版本相同 cat /o ...
- MAC怎么快速截图
1.截取全屏 按住[command][shift][3]这三个键即可截取全屏. 编辑 2.截取某区域 按住[command][shift][4]. 编辑 3.截图完成 在电脑桌面能找到截图 ...
- hyper给linux扩容空间
1.hyper操作 (1)关机后,在设置中,查看硬盘驱动器中的虚拟磁盘及编号, (2)编辑磁盘->查找磁盘中选中刚才的编号磁盘 (3)操作时扩容(大小填的不是增量 ,是扩容以后的空间) 2.li ...
- [OC] Block 是什么
Block 是 带有自动变量的匿名函数. emmmm 反正我看了也不懂,我们一点点用具体的例子分析一下block. 1. 我们现在要在一个文件中使用block(我们后面再提到两个界面传值的block ...
- Java笔记_成员方法传参机制
成员方法传参机制(非常重要) Parameter(参数).Method(方法).Exercise(练习) 基本数据类型的传参机制 看一下案例,将main中的值传递给类中对象 /** * @ClassN ...
- 快速导出Redis某个List列表所有数据
Redis导出list数据 快速命令行 echo "lrange data_list_with_hash 0 25000" | ./redis-cli.exe -h 127.0.0 ...
- Jvm 相关记录
## 内存分析工具- JConsole.JVisualVM- gperftools Linux 安装- MAT ## JVM Tools• jps: java process status jps - ...