LeetCode 483. 最小好进制(二分查找)
文章目录
- 1. 题目
- 2. 解题
1. 题目
对于给定的整数 n, 如果 n 的 k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制。
以字符串的形式给出 n, 以字符串的形式返回 n 的 最小 好进制。
示例 1:
输入:"13"
输出:"3"
解释:13 的 3 进制是 111。示例 2:
输入:"4681"
输出:"8"
解释:4681 的 8 进制是 11111。示例 3:
输入:"1000000000000000000"
输出:"999999999999999999"
解释:1000000000000000000 的 999999999999999999 进制是 11。提示:
n的取值范围是 [3, 10^18]。
输入总是有效且没有前导 0。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/smallest-good-base
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 数字 n 假设为 2 进制,它最多有多少位是可以求出来的,进制越大,位数越少
- 从最多可能的位数开始遍历
- 每种位数 bit 的情况下,二分查找进制 k,使得 bit 位 k 进制 111…的数等于 n,即找到
- 由于 bit 是从大到小,即进制是小到大的,找到一个解就是最小好进制
class Solution {public:string smallestGoodBase(string n) {long long num = stoll(n);int bit = floor(log(num) / log(2))+1;for( ; bit >= 2; --bit){ //枚举有多少位数long long l = 2, r = num-1, mid;while(l <= r){mid = l+((r-l)>>1); // 进制 midint flag = ok(num, mid, bit);if(flag == 0)return to_string(mid);else if(flag == 1)//进制太大, 位数超了 nr = mid-1;else // 进制太小,位数不够 nl = mid+1;}}return "";}int ok(long long num, long long k, int bit){long long ans = 0;for(int i = 0; i < bit; ++i){if(ans > ceil((num-1)/k)) // ans*k+1 > num, 进制太大了return 1;ans = ans*k+1;}if(ans == num)return 0;//找到了return -1;//进制太小了}
};
12 ms 6 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 483. 最小好进制(二分查找)相关推荐
- leetcode 483. 最小好进制
题目 对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制. 以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制. 示例 ...
- 【leetcode】483. 最小好进制 Java题解
以字符串的形式给出 n , 以字符串的形式返回 n 的最小好进制 . 如果 n 的 k(k>=2) 进制数的所有数位全为1,则称 k(k>=2) 是 n 的一个好进制 . 示例 1: 输入 ...
- [Swift]LeetCode483. 最小好进制 | Smallest Good Base
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Golang]力扣Leetcode - 374. 猜数字大小(二分查找)
[Golang]力扣Leetcode - 374. 猜数字大小(二分查找) 题目:猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我 ...
- LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根
LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...
- leetcode练习一:数组(二分查找、双指针、滑动窗口)
文章目录 一. 数组理论基础 二. 二分查找 2.1 解题思路 2.2 练习题 2.2.1 二分查找(题704) 2.2.2 搜索插入位置(题35) 2.2.3 查找排序数组元素起止位置(题34) 2 ...
- LeetCode 392. 判断子序列(双指针二分查找)
1. 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ...
- LeetCode 475. 供暖器(双指针二分查找)
文章目录 1. 题目 2. 解题 2.1 双指针 2. 二分查找 1. 题目 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置, ...
- LeetCode简单题之七进制数
题目 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出. 示例 1: 输入: num = 100 输出: "202" 示例 2: 输入: num = -7 输出: & ...
最新文章
- ASP.NET中树形图的实现
- Swift如何使用Masonry和SnapKit
- 程序员的起床动力 | 每日趣闻
- 智能车竞赛相关的教高司公函:公函[2005]201号文、教高司[2005]13号
- 央视曝徐梦桃夺冠黑科技:竟然还有个虚拟教练???
- windows修改策略后执行命令_Windows 下的提权大合集
- JavaScript操作select标签详解
- PHP3d地球,three.js绘制地球、飞机与轨迹的效果示例
- 洛谷 P3367 【模板】并查集
- java抽取注释_JAVA 注解教程(五)注解的提取
- Linux下实现Raid 5软阵列
- mysql打错了怎么办_数据库出错了怎么办?
- delphi StatusBar在状态栏中显示checkBox
- p6spy的使用和配置
- 红蓝对抗--蓝军套路之利用系统工具进行文件传输
- C++:66---特殊工具与技术之(不可移植的特性:位域、volatile、extern “C“链接提示)
- ISO质量管理体系认证审核前需要准备的资料
- 官宣 | TDengine物联网大数据平台正式开源
- 计算机病毒原理和防范结论,计算机病毒的原理和防范论文
- 基础字符串函数及其模拟实现
热门文章
- vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。
- YAML-学习笔记!
- android listpreference 自定义,Android ListPreference的用法一
- python选取特定行_pandas.DataFrame选取/排除特定行的方法
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- 支付宝问题LaunchServices: ERROR: There is no registered handler for URL scheme alipay
- 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...
- 3. 中间件安全基础(三)
- Django之ORM对数据库操作
- Spark学习(一) -- Spark安装及简介