leetcode 483. 最小好进制

题目:483. 最小好进制 - 力扣(LeetCode)

用二进制计算位数最长是多少,然后从大到小遍历可能的位数,二分查找"进制数"即可。

cpp 复制代码
class Solution {
public:
    string smallestGoodBase(string n_str) {
        uint64_t n = 0;
        for (int i = 0; i < n_str.length(); i++) {
            n = n * 10 + n_str[i] - '0';
        }
        int max = 1;
        uint64_t t = 2;
        while (t <= n / 2) {
            ++max;
            t *= 2;
        }
        ++max;
        uint64_t ret = n - 1;
        uint64_t l, r, m;
        uint64_t a;
        bool invalid;
        for (int i = max; i > 1; i--) {
            l = 2;
            r = n / i;
            while (l <= r) {
                m = (l + r) / 2;
                t = 1;
                a = 1;
                invalid = false;
                for (int j = 0; j < i; j++) {
                    if (a <= (n - t) / m) {
                        a *= m;
                        t += a;
                    } else {
                        invalid = true;
                        break;
                    }
                }
                if (!invalid && t == n) {
                    ret = m;
                    break;
                }
                if (invalid) {
                    r = m - 1;
                } else {
                    l = m + 1;
                }
            }
            if (ret != n - 1) {
                break;
            }
        }
        
        return to_string(ret);
    }
};
相关推荐
Navigator_Z25 分钟前
LeetCode //C - 1250. Check If It Is a Good Array
c语言·算法·leetcode
圣保罗的大教堂6 小时前
leetcode 3483. 不同三位偶数的数目 简单
leetcode
mmmmath_36 小时前
LeetCode.018.四数之和
数据结构·算法·leetcode
圣保罗的大教堂9 小时前
leetcode 836. 矩形重叠 简单
leetcode
土司大王9 小时前
LeetCode hot100——394.字符串解码:Java 双栈模拟
java·算法·leetcode
a187927218319 小时前
【算法】双指针与滑动窗口(三):相向双指针——比较、排除、收缩
算法·leetcode·双指针·滑动窗口·原理·相向双指针·算法讲解
6Hzlia10 小时前
【Classic 150 刷题计划】 LeetCode 14. 最长公共前缀 | C++ 纵向扫描法与防越界细节
c++·算法·leetcode
Tisfy1 天前
LeetCode 0836.矩形重叠:xy两方向分别看
数学·leetcode·题解·模拟
青山木1 天前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
土司大王1 天前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode