LeetCode 1925 统计平方和三元组的数目

news2025/1/1 17:56:29

探索平方和三元组:从问题到 Java 代码实现

在数学与编程的交叉领域,常常会遇到一些有趣且富有挑战性的问题。今天,就让我们深入探讨一下 “平方和三元组” 这个有趣的话题,并使用 Java 语言来实现计算满足特定条件的平方和三元组数量的功能。

一、问题描述:

一个 平方和三元组 (a,b,c) 指的是满足 a^{2} + b^{2} = c^{2} 的 整数 三元组 ab 和 c 。给你一个整数 n ,请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。

二、什么是平方和三元组:

  平方和三元组是指满足a^{2} + b^{2} = c^{2} 的整数三元组 a,b和 c。例如,(3,4,5)就是一个著名的平方和三元组,因为3^{2}+ 4^{2} =9+16=5^{2} 。

三、代码实现

方法一:暴力解法(三重循环):

public class SquareSumTriples {
    public static int countTriples(int n) {
        //计数器
        int count = 0;
        // 遍历a的取值
        for (int a = 1; a <= n; a++) {
            // 遍历b的取值
            for (int b = 1; b <= n; b++) {
                // 遍历c的取值
                for (int c = 1; c <= n; c++) {
                    // 判断是否满足平方和条件
                    if (a * a + b * b == c * c) {
                        count++;
                    }
                }
            }
        }
        return count;
    }

    //主函数
    public static void main(String[] args) {
        int n = 10;
        //输出
        System.out.println("满足条件的平方和三元组数目为: " + countTriples(n));
    }
}

在上述代码中,countTriples 方法通过三层嵌套的 for 循环,分别对 a,b,c 在  1到 n 的范围内进行遍历。对于每一组 a,b,c 的取值,使用 if 语句判断是否满足  a^{2} + b^{2} = c^{2}  的条件,如果满足,则将计数器 count 加1 。最后,返回 count 的值,即为满足条件的平方和三元组的数目。

这种暴力解法的优点是思路简单直接,易于理解和实现。然而,它的时间复杂度为O(n^{3}) ,当 n较大时,计算量会非常庞大,效率较低。

方法二:优化后的解法

为了提高效率,我们可以对上述代码进行优化。观察到对于给定的a  和 b,c 的值是由 a 和 b 决定的,即 c=\sqrt{a^{2}+b^{2}}。因此,我们可以减少一层循环,通过计算得到 c的值,并判断其是否满足条件。以下是优化后的代码:

public class SquareSumTriplesOptimized {
    public static int countTriples(int n) {
        int count = 0;
        // 遍历a的取值
        for (int a = 1; a <= n; a++) {
            // 遍历b的取值
            for (int b = 1; b <= n; b++) {
                int sumOfSquares = a * a + b * b;
                double cDouble = Math.sqrt(sumOfSquares);
                int c = (int) cDouble;
                // 判断c是否为整数且在范围内
                if (cDouble == c && c >= 1 && c <= n) {
                    count++;
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入整数n: ");
        int n = scanner.nextInt();
        System.out.println("满足条件的平方和三元组数目为: " + countTriples(n));
        scanner.close();
    }
}

在优化后的代码中,countTriples 方法使用两层嵌套的 for 循环遍历a和b的取值。对于每一组 a 和 b,先计算出它们的平方和 sumOfSquares,然后通过 Math.sqrt 方法计算出平方根 cDouble,并将其转换为整数 c。接着,通过判断 cDouble == c 来确定 c 是否为整数,以及判断 c 是否在1到 n的范围内。如果满足条件,则将计数器 count 加 1。最后,返回 count 的值。

这种优化后的解法时间复杂度为 O(n^{2}),相比暴力解法,效率得到了显著提高。

四、总结

通过对平方和三元组问题的探讨和 Java 代码实现,我们看到了不同解法在效率上的差异。在实际编程中,当面对类似问题时,我们应该思考如何优化算法,以提高程序的性能。暴力解法虽然简单直接,但在处理大规模数据时可能会遇到性能瓶颈。而通过对问题的深入分析,找到其中的规律和优化点,能够帮助我们设计出更高效的算法。希望这篇博客能够帮助读者更好地理解平方和三元组问题以及相关的编程技巧,在数学与编程的学习道路上更进一步。

以上就是关于平方和三元组问题的完整博客内容,你可以根据实际情况进行调整和修改。如果还有其他问题,欢迎随时交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效…

vue横向滚动日期选择器组件

vue横向滚动日期选择器组件 组件使用到了element-plus组件库和dayjs库&#xff0c;使用前先保证项目中已经下载导入 主要功能&#xff1a;选择日期&#xff0c;点击日期可以让此日期滚动到视图中间&#xff0c;左滑右滑同理&#xff0c;支持跳转至任意日期&#xff0c;支持自…

Firecrawl教程①:自动化抓取与数据转化,赋能AI应用

Firecrawl教程①:自动化抓取与数据转化,赋能AI应用 前言一、功能特点1. 支持 LLM 可处理的数据格式2. 全面抓取网站3. 强大的操作支持4. 灵活的定制选项5. 支持多种编程语言 SDK二、如何开始使用 Firecrawl第一步:获取 API 密钥第二步:官网在线工具使用第三步:安装 Firecr…

WatchAlert - 开源多数据源告警引擎

概述 在现代 IT 环境中&#xff0c;监控和告警是确保系统稳定性和可靠性的关键环节。然而&#xff0c;随着业务规模的扩大和数据源的多样化&#xff0c;传统的单一数据源告警系统已经无法满足复杂的需求。为了解决这一问题&#xff0c;我开发了一个开源的多数据源告警引擎——…

svn版本丢失导致无法访问临时解决方法

#svn异常问题# 在使用svn的过程中&#xff0c;有时候在数据量比较大的情况下&#xff0c;有涉及到数据迁移或者是文件移动操作时容易出现迁移过程中有人还提交了数据&#xff0c;导致迁移的数据出现版本丢失的情况。 比如说&#xff0c;我实际遇到的情况是迁移数据的时候记录…

0009.基于springboot+layui的ERP企业进销存管理系统

一、系统说明 基于springbootlayui的ERP企业进销存管理系统,系统功能齐全, 代码简洁易懂&#xff0c;适合小白学编程,课程设计&#xff0c;毕业设计。 二、系统架构 前端&#xff1a;html| layui 后端&#xff1a;springboot | mybatis| thymeleaf 环境&#xff1a;jdk1.8 |…

Latex+VsCode+Win10搭建

最近在写论文&#xff0c;overleaf的免费使用次数受限&#xff0c;因此需要使用本地的形式进行编译。 安装TEXLive 下载地址&#xff1a;https://mirror-hk.koddos.net/CTAN/systems/texlive/Images/ 下载完成直接点击iso进行安装操作。 安装LATEX Workshop插件 设置VsCode文…

[创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论

目录 一、价值转移理论 1.1. 什么是价值&#xff1f; 1.2. 什么价值创造 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、影响价值创造的因素 &#xff08;3&#xff09;、价值创造的三个过程 &#xff08;4&#xff09;、价值创造的实践 &#xff08;5&…

如何在单选按钮中添加图标和文字

文章目录 1. 概念介绍2. 使用方法3. 示例代码我们在上一章回中介绍了Radio Widget相关的内容,本章回中将介绍RadioListTile Widget.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里介绍的RadioListTile和上一章回中介绍的Radio类似,不同之处在于RadioListTile组…

启动异常:Caused by: java.lang.IllegalStateException: Failed to introspect Class

背景 今天项目需要&#xff0c;导入一个本地的jar包&#xff0c;在pom文件&#xff0c;添加自定义依赖后&#xff0c;并通过mvn命令&#xff1a; mvn install:install-file -Dfilejar包的位置 -DgroupId自定义的groupId -DartifactId自定义的artifactId -Dversion自定义的ver…

clickhouse-副本和分片

1、副本 1.1、概述 集群是副本和分片的基础&#xff0c;它将ClickHouse的服务拓扑由单节点延伸到多个节点&#xff0c;但它并不像Hadoop生态的某些系统那样&#xff0c;要求所有节点组成一个单一的大集群。ClickHouse的集群配置非常灵活&#xff0c;用户既可以将所有节点组成…

Python机器学习算法KNN、MLP、NB、LR助力油气钻井大数据提速参数优选及模型构建研究...

全文链接&#xff1a;https://tecdat.cn/?p38601 分析师&#xff1a;Huayan Mu 随着机器学习和大数据分析技术的发展&#xff0c;帮助客户进行油气行业数字化转型势在必行&#xff0c;钻井提速参数优选呈现由经验驱动、逻辑驱动向数据驱动转变的趋势。机械钻速最大化、机械比能…

【尚硅谷 - SSM+SpringBoot+SpringSecurity框架整合项目 】项目打包并且本地部署

前后端分离开发&#xff1a;把一个项目拆成两部分进行开发&#xff0c;所以在打包的时候&#xff0c;需要使用不同的打包方式。 后端 – SpringBoot – jar包 前端 – Vue: 因为使用了vue-admin-template框架&#xff1a;所以先使用框架进行打包使用Nginx部署&#xff0c;通…

练13:二分法

欢迎大家订阅【蓝桥杯Python每日一练】 专栏&#xff0c;开启你的 Python数据结构与算法 学习之旅&#xff01; 文章目录 1 二分查找2 例题分析 1 二分查找 ①定义 在计算机科学中&#xff0c;二分算法&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;…

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…

基于ST STM32MP257FAK3的MP2控制器之工业PLC 方案

简介 1.可编程逻辑控制器&#xff08;PLC&#xff09;是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器&#xff0c;在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令&#xff0c;通过数字式或模拟式的输入输出来控制…

唯品会Android面试题及参考答案

HTTP 和 HTTPS 的区别是什么?你的项目使用的是 HTTP 还是 HTTPS? HTTP 和 HTTPS 主要有以下区别。 首先是安全性。HTTP 是超文本传输协议,数据传输是明文的,这意味着在数据传输过程中,信息很容易被窃取或者篡改。比如,在一个不安全的网络环境下,黑客可以通过网络嗅探工具…

黑马Java面试教程_P2_Redis

系列博客目录 文章目录 系列博客目录1前言2 使用场景面试官提问1&#xff1a;我看你做的项目中&#xff0c;都用到了redis&#xff0c;你在最近的项目中哪些场景使用了redis呢?面试官会接着问你1.1&#xff1a;如果发生了缓存穿透、击穿、雪崩&#xff0c;该如何解决?2.1缓存…

Python如何正确解决reCaptcha验证码(9)

前言 本文是该专栏的第73篇,后面会持续分享python爬虫干货知识,记得关注。 我们在处理某些国内外平台项目的时候,相信很多同学或多或少都见过,如下图所示的reCaptcha验证码。 而本文,笔者将重点来介绍在实战项目中,遇到上述中的“reCaptcha验证码”,如何正确去处理并解…

Unity3D仿星露谷物语开发5之角色单例模式

1、目的 使用单例模式创建角色对象&#xff0c;保证整个游戏中只有一个角色&#xff0c;并且让游戏对象具有全局可访问性。 2、流程 &#xff08;1&#xff09;创建SingletonMonobehaviour脚本 Assets下创建Scripts目录用于存放所有的脚本&#xff0c;再创建Misk子目录&…