文章目录

  • 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. 最小好进制(二分查找)相关推荐

  1. leetcode 483. 最小好进制

    题目 对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制. 以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制. 示例 ...

  2. 【leetcode】483. 最小好进制 Java题解

    以字符串的形式给出 n , 以字符串的形式返回 n 的最小好进制 . 如果 n 的 k(k>=2) 进制数的所有数位全为1,则称 k(k>=2) 是 n 的一个好进制 . 示例 1: 输入 ...

  3. [Swift]LeetCode483. 最小好进制 | Smallest Good Base

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. [Golang]力扣Leetcode - 374. 猜数字大小(二分查找)

    [Golang]力扣Leetcode - 374. 猜数字大小(二分查找) 题目:猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我 ...

  5. LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根

    LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...

  6. leetcode练习一:数组(二分查找、双指针、滑动窗口)

    文章目录 一. 数组理论基础 二. 二分查找 2.1 解题思路 2.2 练习题 2.2.1 二分查找(题704) 2.2.2 搜索插入位置(题35) 2.2.3 查找排序数组元素起止位置(题34) 2 ...

  7. LeetCode 392. 判断子序列(双指针二分查找)

    1. 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ...

  8. LeetCode 475. 供暖器(双指针二分查找)

    文章目录 1. 题目 2. 解题 2.1 双指针 2. 二分查找 1. 题目 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置, ...

  9. LeetCode简单题之七进制数

    题目 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出. 示例 1: 输入: num = 100 输出: "202" 示例 2: 输入: num = -7 输出: & ...

最新文章

  1. ASP.NET中树形图的实现
  2. Swift如何使用Masonry和SnapKit
  3. 程序员的起床动力 | 每日趣闻
  4. 智能车竞赛相关的教高司公函:公函[2005]201号文、教高司[2005]13号
  5. 央视曝徐梦桃夺冠黑科技:竟然还有个虚拟教练???
  6. windows修改策略后执行命令_Windows 下的提权大合集
  7. JavaScript操作select标签详解
  8. PHP3d地球,three.js绘制地球、飞机与轨迹的效果示例
  9. 洛谷 P3367 【模板】并查集
  10. java抽取注释_JAVA 注解教程(五)注解的提取
  11. Linux下实现Raid 5软阵列
  12. mysql打错了怎么办_数据库出错了怎么办?
  13. delphi StatusBar在状态栏中显示checkBox
  14. p6spy的使用和配置
  15. 红蓝对抗--蓝军套路之利用系统工具进行文件传输
  16. C++:66---特殊工具与技术之(不可移植的特性:位域、volatile、extern “C“链接提示)
  17. ISO质量管理体系认证审核前需要准备的资料
  18. 官宣 | TDengine物联网大数据平台正式开源
  19. 计算机病毒原理和防范结论,计算机病毒的原理和防范论文
  20. 基础字符串函数及其模拟实现

热门文章

  1. vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。
  2. YAML-学习笔记!
  3. android listpreference 自定义,Android ListPreference的用法一
  4. python选取特定行_pandas.DataFrame选取/排除特定行的方法
  5. 浅谈 C++ 中的 new/delete 和 new[]/delete[]
  6. 支付宝问题LaunchServices: ERROR: There is no registered handler for URL scheme alipay
  7. 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...
  8. 3. 中间件安全基础(三)
  9. Django之ORM对数据库操作
  10. Spark学习(一) -- Spark安装及简介