LeetCode 1925.统计平方和三元组的数目:两层循环枚举

【LetMeFly】1925.统计平方和三元组的数目:两层循环枚举

力扣题目链接:https://leetcode.cn/problems/count-square-sum-triples/

一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2整数 三元组 abc

给你一个整数 n ,请你返回满足1 <= a, b, c <= n平方和三元组 的数目。

示例 1:

复制代码
输入:n = 5
输出:2
解释:平方和三元组为 (3,4,5) 和 (4,3,5) 。

示例 2:

复制代码
输入:n = 10
输出:4
解释:平方和三元组为 (3,4,5),(4,3,5),(6,8,10) 和 (8,6,10) 。

提示:

  • 1 <= n <= 250

解题方法:两层循环枚举

n的数据范围只有 250 250 250,因此可以第一层循环用 a a a从 1 1 1到 n n n枚举,第二层循环用 b b b从 1 1 1到 n n n枚举。

由于第三层循环再从 1 1 1枚举到 n n n的话,最大时间复杂度可能会达到 25 0 3 ≈ 1.6 × 1 0 7 250^3\approx1.6\times10^7 2503≈1.6×107,有超时风险,

所以直接算出 a 2 + b 2 a^2+b^2 a2+b2的值(记为 k k k),令 c = ⌊ k ⌋ c=\lfloor\sqrt{k}\rfloor c=⌊k ⌋,看 c c c是否不超过 n n n且 c 2 = k c^2=k c2=k

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2),开根号时间复杂度视为 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2025-12-08 18:47:09
 */
#if defined(_WIN32) || defined(__APPLE__)
#include "_[1,2]toVector.h"
#endif

class Solution {
public:
    int countTriples(int n) {
        int ans = 0;
        for (int a = 1; a <= n; a++) {
            for (int b = 1; b <= n; b++) {
                int k = a * a + b * b;
                int c = sqrt(k);
                ans += c * c == k && c <= n;
                // if (c * c == k) {
                //     printf("(%d, %d, %d)\n", a, b, c);
                // }
            }
        }
        return ans;
    }
};

#if defined(_WIN32) || defined(__APPLE__)
int main() {
    Solution sol;
    cout << sol.countTriples(5) << endl;
    cout << sol.countTriples(12) << endl;
    return 0;
}
#endif
Python
python 复制代码
'''
LastEditTime: 2025-12-08 18:53:01
'''
from math import sqrt

class Solution:
    def countTriples(self, n: int) -> int:
        ans = 0
        for a in range(1, n + 1):
            for b in range(1, n + 1):
                k = a * a + b * b
                c = int(sqrt(k))
                ans += c <= n and c * c == k
                # if c <= n and c * c == k:
                #     print(f"({a}, {b}, {c})")
        return ans

# a = Solution()
# print(a.countTriples(5))
Java
java 复制代码
/*
 * @LastEditTime: 2025-12-08 18:59:47
 */
class Solution {
    public int countTriples(int n) {
        int ans = 0;
        for (int a = 1; a <= n; a++) {
            for (int b = 1; b <= n; b++) {
                int k = a * a + b * b;
                int c = (int)Math.sqrt(k);
                if (c <= n && c * c == k) {
                    ans++;
                }
            }
        }
        return ans;
    }
}
Go
go 复制代码
/*
 * @LastEditTime: 2025-12-08 18:57:02
 */
package main

import "math"

func countTriples(n int) (ans int) {
    for a := 1; a <= n; a++ {
        for b := 1; b <= n; b++ {
            k := a * a + b * b
            c := int(math.Sqrt(float64(k)))
            if c <= n && c * c == k {
                ans++
            }
        }
    }
    return
}
Rust
rust 复制代码
/*
 * @LastEditTime: 2025-12-08 21:55:06
 */
impl Solution {
    pub fn count_triples(n: i32) -> i32 {
        let mut ans: i32 = 0;
        for a in 1..n+1 {
            for b in 1..n+1 {
                let k = a * a + b * b;
                let c = (k as f64).sqrt() as i32;
                if c <= n && c * c == k {
                    ans += 1;
                }
            }
        }
        ans
    }
}

End

I am back

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
AndrewHZ5 小时前
【复杂网络分析】如何入门Louvain算法?
python·算法·复杂网络·社区发现·community det·louvain算法·图挖掘
AndrewHZ5 小时前
【图像处理基石】如何基于黑白图片恢复出色彩?
图像处理·深度学习·算法·计算机视觉·cv·色彩恢复·deoldify
POLITE35 小时前
Leetcode 3.无重复字符的最长子串 JavaScript (Day 4)
javascript·算法·leetcode
Xの哲學5 小时前
Linux IPC机制深度剖析:从设计哲学到内核实现
linux·服务器·网络·算法·边缘计算
sin_hielo5 小时前
leetcode 756(枚举可填字母)
算法·leetcode
Jeremy爱编码5 小时前
leetcode热题子集
算法·leetcode·职场和发展
csg11075 小时前
LORA网络的“最后一公里”难题:当信号被重重阻挡,我们有哪些“方法”来增强覆盖?
单片机·嵌入式硬件·物联网·算法
brave and determined5 小时前
传感器学习(day18):智能手机3D结构光:解锁未来的第三只眼
嵌入式硬件·算法·3d·智能手机·tof·嵌入式设计·3d结构光
CoovallyAIHub5 小时前
当小龙虾算法遇上YOLO:如何提升太阳能电池缺陷检测精度?
深度学习·算法·计算机视觉
Tisfy5 小时前
LeetCode 756.金字塔转换矩阵:深度优先搜索
leetcode·矩阵·深度优先