[LeetCode 周赛181] 2. 四因数(暴力、常规解法)
发布日期:2021-05-12 23:18:46 浏览次数:26 分类:精选文章

本文共 874 字,大约阅读时间需要 2 分钟。

3. 题目解析

方法一:暴力 + 常规解法

暴力计算因数个数,因数是成对出现的,所以不存在同时两个因数都大于当前数的开平方,那么就暴力范围就降至根号当前数了。并且值得注意的一点就是平方数的因数只计算一次即可。先模再除顺序不能颠倒,很容易理解。

C++ 代码示例

// 执行用时 :68 ms, 在所有 C++ 提交中击败了100.00%的用户// 内存消耗 :8.6 MB, 在所有 C++ 提交中击败了100.00%的用户class Solution {public:    int sumFourDivisors(std::vector
& nums) { int res = 0; for (auto& e : nums) { int cnt = 0, sum = 0; for (int i = 1; i * i <= e; ++i) { if (e % i == 0) { ++cnt, sum += i; if (e / i != i) { ++cnt, sum += e / i; } } } if (cnt == 4) res += sum; } return res; }};

解释如下:

  • 该函数遍历输入整数集合 nums
  • 对于每个整数 e,初始化计数器 cnt 和求和器 sum
  • 从 1 到 e 的平方根,遍历所有可能的除数 i
  • 检查 e 是否能被 i 整除。
  • 如果能整除,记为一个因数 i,与 e/i 作为另一个因数(若不相等)。
  • 统计因数个数 cnt 和因数和 sum
  • 若因数个数为 4,则加到结果中。
  • 最终返回总和 res
上一篇:[LeetCode 周赛181] 3. 检查网格中是否存在有效路径(bfs、硬编码、常规解法)
下一篇:[LeetCode 周赛181] 1. 按既定顺序创建目标数组(暴力、常规解法)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年05月06日 01时41分53秒