力扣633(java&python)-平方数之和(中等)
题目:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5
示例 2:
输入:c = 3
输出:false
提示:
0 <= c <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-of-square-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
一、双指针
根据a2 + b2 = c,可以得出a和b的取值范围均为[0,sqrt(c)],故可以初始化两个指针a = 0, b = sqrt(c),则开始循环,循环条件是当 a <= b:
- a2 + b2 < c : 当前值比目标值要小,a++;
- a2 + b2 > c:当前值比目标值要大,b--;
- a2 + b2 = c:找到符合条件的 a 和 b,返回 true
循环结束没找到符合条件的值,则返回false。
例如:图解参考@嘉然
1.给定c = 32, 初始值a = 0, b = 5, 25 < 32,则a++;
2.a = 1,b = 5,26 < 32,则a++;
3.a = 2,b = 5, 29 < 32,则a++;
4.a = 3,b = 5,34 > 32,则b--;
5.a = 3,b = 4,25 < 32,则a++;
6.a = 4,b = 4, 32与目标值相同,返回true
根据图解的过程可以发现:
1.初始化时橙色格子一定在矩阵的右上角;
2.每次比较 a2 + b2 和 c可以排除矩阵的一行或一列,即当前橙色格子的上方和右边的元素一定被排除了。
即
- 小于 c :左边的元素都小于当前元素,只能下移,相当于a++。此时排除的是橙色格子以及左边同行的元素,都小于 c ,所以不会错过正确答案;
- 大于 c :下面的元素都大于当前元素,只能左移,相当于b--。此时排除的是橙色格子以及下方同列的元素,都大于 c ,所以不会错过正确答案。
java代码:
注意:
long sum =(long) a * a + b * b;
如果不设为long 类型,a与b都是int类型,如果C为一个接近int极限值的值,b最大,在a++的过程中,sum算出来就可能超出int的最大值从而导致溢出。
1 class Solution {
2 public boolean judgeSquareSum(int c) {
3 int a = 0,b = (int)Math.sqrt(c);
4 while(a <= b){
5 long sum =(long) a * a + b * b;
6 if(sum < c){
7 a++;
8 }else if(sum > c){
9 b--;
10 }else{
11 return true;
12 }
13 }
14 return false;
15 }
16 }
python3代码:
1 class Solution:
2 def judgeSquareSum(self, c: int) -> bool:
3 a, b = 0, (int)(math.sqrt(c))
4 while a <= b:
5 sum = a * a + b * b
6 if(sum < c):
7 a += 1
8 elif(sum > c):
9 b -= 1
10 else:
11 return True
12 return False
二、枚举
根据a2 + b2 = c,可以得出a和b的取值范围均为[0,sqrt(c)],那将a从[0,sqrt(c)],然后根据a算出b,然后对a * a + b * b == c进行判断,成立返回 true,不成立返回 fasle。
java代码:
1 class Solution {
2 public boolean judgeSquareSum(int c) {
3 int max = (int)Math.sqrt(c);
4 for(int a = 0; a <= max; a++){
5 int b = (int)Math.sqrt(c - a * a);
6 if(a * a + b * b == c) return true;
7 }
8 return false;
9 }
10 }
python3代码:
1 class Solution:
2 def judgeSquareSum(self, c: int) -> bool:
3 max = (int)(math.sqrt(c))
4 for a in range(max + 1):
5 b = (int)(math.sqrt(c - a * a))
6 if a * a + b * b == c:
7 return True
8 return False
力扣633(java&python)-平方数之和(中等)的更多相关文章
- 力扣(LeetCode)平方数之和 个人题解
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 示例2: 输入: 3 ...
- 力扣 —— Two Sum ( 两数之和) python实现
题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...
- Java实现 LeetCode 633 平方数之和(暴力大法)
633. 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 ...
- C#版 - Leetcode 633. 平方数之和 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- C#刷遍Leetcode面试题系列连载(4) No.633 - 平方数之和
上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetCode 中的另一道数学题吧~ 今天要给大家分析的面试题是 LeetCode 上第 633 号问题, Leetcode 633 - 平方数 ...
- [LeetCode] 633. Sum of Square Numbers 平方数之和
Given a non-negative integer c, your task is to decide whether there're two integers a and b such th ...
- [LeetCode] Sum of Square Numbers 平方数之和
Given a non-negative integer c, your task is to decide whether there're two integers a and b such th ...
- 【JavaScript】Leetcode每日一题-平方数之和
[JavaScript]Leetcode每日一题-平方数之和 [题目描述] 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例1: 输入:c = 5 ...
- leetcode.双指针.633平方数之和-Java
1. 具体题目 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 注 ...
- [Java]1.两数之和 - LeetCode
1 题目 2 思路与代码 思路一:暴力法(两层For循环) 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间.因此时间复杂度为 ...
随机推荐
- vscode 对js文件不格式化的修正方案 settings.json
修正1 "javascript.format.enable": true, // 这里false 改true 修正2 注释掉这个地方 // "[javascript]&q ...
- br 词根 分支 broad bread branch brother broom 看到abroad后查到的
br-分支 cl-集合 pater-父亲 br/other 兄弟-br/oom笤帚-br/eed繁殖-br/ood一窝-br/eak打破-br/anch分枝 cl/ash碰撞-class/ify分类- ...
- Vue + Element-ui实现后台管理系统(6)---权限管理思路讲解
权限管理思路讲解 有关后台管理系统之前写过五篇博客,看这篇之前最好先看下这五篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system 1.Vue + El ...
- 文旅新体验!3DCAT助力广州非遗“元宇宙”街区炫酷亮相
2022年6月12日,2022年"文化和自然遗产日"广州非遗宣传展示主会场暨广州非遗街区(北京路)开街仪式在南越王博物院(王宫展区)举行. 本次活动由广州市文化广电旅游局主办,广州 ...
- API和String字符串介绍
API 1.如何使用Java已经写好的东西(方法,类) API(Application programming interface):应用程序编程接口 简单理解:API就是别人已经写好了的东西,我们不 ...
- TP6框架--EasyAdmin学习笔记:Excel表单导入数据库
这是我写的学习EasyAdmin的第四章,这一章我给大家分享下Excel表单导入数据库的全流程需要怎么处理并提供案例 首先给大家看下这个功能的原理,下面是PHP连接打印机的代码 public func ...
- Kafka之Producer网络传输
一.背景 在Kafka的组成部分(Broker.Consumer.Producer)中,设计理念迥异,每个部分都有自己独特的思考.而把这些部分有机地组织起来,使其成为一个整体的便是「网络传输」.区别于 ...
- 以最大速度将数据迁移至AWS S3存储
数据上云,已经成为企业数据管理发展的必然趋势. 对于企业而言,数据上云"常态化"的趋势,无疑是一个巨大的技术红利.而数据规模爆发式增长的今天,移动和访问云端数据却成为困扰企业的一大 ...
- proteus的C51仿真
Proteus的C51仿真 1.实验原理 Proteus是对C51仿真效果比较好的软件了,可以利用丰富的数字资源的外设实现比较接近实际的设计.仿真方法也比较简单,不需要下载,只需要将仿真文件导出到器件 ...
- kingbaseES sql 优化技巧汇总
1.整体思路 针对业务系统的出现的慢sql 我们的优化步骤大概分为以下几步 1.识别高负载语句 2.收集性能相关的数据 3.确定性能问题产生的原因 4.实施优化手段 下面我们针对这几个步骤展开进行讲解 ...