在第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助手提供,问题来源于学员提问