給你一個整數陣列 nums,請你回傳該陣列中恰有四個因數的這些整數的各因數之和,如果陣列中不存在滿足題意的整數,則回傳 0
解題思路
遍歷陣列中的每個元素,依次判斷這些元素是否恰好有四個因數,對于任一元素 x,如果整數 x 有因數 y,那么也必有因數 x/y,并且 y 和 x/y 中至少有一個不大于 sqrt(x),這樣我們只需要在 [1, sqrt(x)] 的區間內列舉可能為整數 x 的因數 y,并通過 x/y 得到整數 x 的其它因數,如果 x 恰好有四個因數,我們就將其因數之和累加到答案中
class Solution {
public int sumFourDivisors(int[] nums) {
int result = 0;
for(int num : nums) {
// factor_count 因數的個數,factor_sum 因數的和
int factor_count = 0, factor_sum = 0;
for(int i = 1; i * i <= num; i++) {
// i 是 num 的一個因數
if(num % i == 0) {
factor_count++;
factor_sum += i;
// 判斷 i 和 num/i 是否相等
// 不相等才能將 num/i 加入
if(i * i != num) {
factor_count++;
factor_sum += num/i;
}
}
}
if(factor_count == 4) {
result += factor_sum;
}
}
return result;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/228726.html
標籤:其他
上一篇:root一個Android 4.4電視盒,安裝自己的媒體App和技術人喜歡的工具
下一篇:線性表結構:陣列
