ZBLOG

class Solution { public: int nthSuperUglyNumber(int n, vector& primes) { std::priority_queue pq; std::set seen; pq.push(1); std::vector vec; int num; for (int i = 0; i < n; i+...

在第14行的代码中,出现了整数溢出的错误。这是因为计算primes[j] * num时结果超出了int类型的表示范围。解决方法是使用更大范围的整数类型来保存计算结果。

你可以将数据类型修改为long long int,这样可以处理更大的整数值。请尝试以下修改:

class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {
        std::priority_queue<long long int> pq;
        std::set<long long int> seen;
        pq.push(1);
        std::vector<int> vec;
        long long int num;  // 修改为 long long int 类型
        for (int i = 0; i < n; i++) {
            num = pq.top();
            pq.pop();
            vec.push_back(num);
            for (int j = 0; j < primes.size(); j++) {
                if (seen.find(primes[j] * num) == seen.end()) {
                    pq.push(primes[j] * num);
                    seen.insert(primes[j] * num);
                }
            }
        }
        return static_cast<int>(num);  // 强制转换回 int 类型进行返回
    }
};

通过将数据类型改为long long int并在返回前强制转换回int类型,应该能够解决运行时溢出错误。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=2359

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?