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);
    }
};
相关推荐
让我上个超影吧9 小时前
【力扣26&80】删除有序数组中的重复项
算法·leetcode
漫随流水11 小时前
leetcode回溯算法(78.子集)
数据结构·算法·leetcode·回溯算法
We་ct12 小时前
LeetCode 151. 反转字符串中的单词:两种解法深度剖析
前端·算法·leetcode·typescript
wen__xvn12 小时前
代码随想录算法训练营DAY25第七章 回溯算法 part04
算法·leetcode·深度优先
June bug13 小时前
(#字符串处理)字符串中第一个不重复的字母
python·leetcode·面试·职场和发展·跳槽
AlenTech14 小时前
197. 上升的温度 - 力扣(LeetCode)
算法·leetcode·职场和发展
源代码•宸15 小时前
Leetcode—404. 左叶子之和【简单】
经验分享·后端·算法·leetcode·职场和发展·golang·dfs
WBluuue15 小时前
数据结构与算法:dp优化——优化尝试和状态设计
c++·算法·leetcode·动态规划
im_AMBER16 小时前
Leetcode 105 K 个一组翻转链表
数据结构·学习·算法·leetcode·链表
sin_hielo16 小时前
leetcode 1877
数据结构·算法·leetcode