https://leetcode.com/problems/four-divisors?envType=daily-question&envId=2026-01-04
找因數並且做相加的題目。找因數是我很害怕的類型,因為我對輾轉相除法之類的真的是永遠背不起來,每次都考過就忘,遇到這題我的知識庫裡就只剩暴力破解了😑。
程式碼如下:
class Solution {
public:
int sumFourDivisors(vector<int>& nums) {
int ans = 0;
for(auto& num:nums) {
ans += checkDiv(num);
}
return ans;
}
int checkDiv(int& num) {
int limit = sqrt(num);
if (sqrt(num) - limit > 0) {
limit += 1;
}
else return 0;
int ans = 0;
for (int i = 2; i < limit; i++) {
if (num % i == 0) {
if (ans != 0 || i == num / i) {
ans = 0;
break;
}
else {
ans += 1;
ans += num;
ans += i;
ans += num / i;
}
}
}
return ans;
}
};
原本以為成績會蠻爛的,沒想到 beat 88%!memory 更是 beat 92%。看來大家應該都以暴力法為基礎在優化(我猜)。我唯一有做的小優化應該是 sqrt 的部分,可以少掉平方根的計算量。但這邊其實也有很多陷阱,像是 limit 要加 1 還有若是完美平方數連算都不用算就回傳 0 等等。都是用 WA 堆出來的經驗哈哈。
不過整體來說,這題暴力法就可以得到這麼好的成績應該算是 medium 裡面偏簡單的題目了。程式碼本身我也沒有寫超過十分鐘,今天 daily 看起來是用來鞏固我們信心的。
有時間的話再看看別人怎麼做
Best Solution
TODO








