LeetCode算法题-Sum of Square Numbers(Java实现)
这是悦乐书的第276次更新,第292篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第144题(顺位题号是633)。给定一个非负整数c,判断是否存在两个整数a和b,使得a的平方与b的平方之和等于c。例如:
输入:5
输出:true
说明:1 x 1 + 2 x 2 = 5
输入:3
输出:false
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
暴力解法,直接使用两层for循环,分别从0开始,上限为c的平方根,如果存在两数平方和等于c,就返回true,否则返回false。
此解法可能会超时,不建议使用。
public boolean judgeSquareSum(int c) {
int num = (int)Math.sqrt(c);
for (int a=0; a <= num; a++) {
for (int b=0; b<= num; b++) {
if (a*a + b*b == c) {
return true;
}
}
}
return false;
}
03 第二种解法
使用HashSet。如果在c的平方根范围内,存在两数平方和等于c,那么先将单个数的平方值a添加进set中,然后再去判断set中是否存在c减去a的另一个值b,如果存在就返回true。
public boolean judgeSquareSum(int c) {
HashSet<Integer> set = new HashSet<>();
int num = (int)Math.sqrt(c);
for (int i=num; i >= 0; i--) {
set.add(i*i);
if (set.contains(c-i*i)) {
return true;
}
}
return false;
}
04 第三种解法
我们也可以不使用HashSet。依旧是先确定取值范围,上限为c的平方根取整。在0到c的平方根范围内,如果当前一个数的平方根正好等于c,直接返回true,因为另外一个数可能是0;如果不等于,就用c减去当前此数的平方根并赋值给a,再对得到的差开方并赋值给b,如果b的平方等于a,直接返回true,说明存在两数之和等于c。
public boolean judgeSquareSum(int c) {
int num = (int)Math.sqrt(c);
for (int i=num; i >= 0; i--) {
if (i*i == c) {
return true;
}
int a = c - i*i;
int b = (int)Math.sqrt(a);
if (b*b == a) {
return true;
}
}
return false;
}
05 第四种解法
使用双指针。首指针a从0开始,尾指针b从c的平方根开始,如果a的平方加上b的平方的值大于c,那么尾指针b就减1;如果小于c,那么首指针a就加1;如果等于c,直接返回true。
public boolean judgeSquareSum(int c) {
int num = (int)Math.sqrt(c);
int a = 0;
int b = num;
while (a <= b) {
if (a*a + b*b > c) {
b--;
} else if (a*a + b*b < c) {
a++;
} else {
return true;
}
}
return false;
}
06 小结
此题本质上是一道数学题,先需要确定取值范围,然后在该范围内找到合适的两个数,使其平方和等于另外一个数,你可以使用二分查找法、双指针或者其他算法来实现。
算法专题目前已日更超过四个月,算法题文章144+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Sum of Square Numbers(Java实现)的更多相关文章
- LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367).给定正整数num,写一个函数,如果num是一个完美的正方形 ...
- LeetCode算法题-Sum of Left Leaves(Java实现)
这是悦乐书的第217次更新,第230篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第85题(顺位题号是404).找到给定二叉树中所有左叶的总和.例如: 二叉树中有两个左叶 ...
- LeetCode算法题-Sum of Two Integers(Java实现)
这是悦乐书的第210次更新,第222篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第78题(顺位题号是371).计算两个整数a和b的总和,但不允许使用运算符+和 - .例 ...
- LeetCode算法题-Reach a Number(Java实现)
这是悦乐书的第310次更新,第331篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第179题(顺位题号是754).你站在无限数字线的0号位置.在目的地有个target.在 ...
- LeetCode算法题-Find Pivot Index(Java实现)
这是悦乐书的第304次更新,第323篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第172题(顺位题号是724).给定一个整数nums数组,编写一个返回此数组的" ...
- LeetCode算法题-Binary Tree Tilt(Java实现)
这是悦乐书的第263次更新,第276篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第130题(顺位题号是563).给定二叉树,返回整棵树的倾斜度.树节点的倾斜被定义为所有 ...
- LeetCode算法题-Array Partition I(Java实现)
这是悦乐书的第262次更新,第275篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第129题(顺位题号是561).给定一个2n个整数的数组,你的任务是将这些整数分组为n对 ...
- LeetCode算法题-Max Consecutive Ones(Java实现)
这是悦乐书的第242次更新,第255篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第109题(顺位题号是485).给定二进制数组,找到此数组中连续1的最大数量.例如: 输 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
随机推荐
- Android中,粗暴的方式,修改字体
序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...
- [Leetcode]538. Convert BST to Greater Tree
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...
- 2018年Fintech金融科技关键词和入行互金从业必懂知识
2018年过去大半,诸多关键词进入眼帘: 5G,消费降级,数据裸奔,新零售,AI,物联网,云计算,合规监管,风控,割韭菜,区块链,生物识别,国民空闲时间以及金融科技. 这些词充斥着我们的生活和时间,而 ...
- 强大的jupyter,python开发者的福音
jupyter是一种交互式计算和开发环境的笔记,ipython命令行比原生的python命令行更加友好和高效,还可以运行web版的界面,支持多语言,输出图形.音频.视频等功能. 一.安装 pip3 i ...
- 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子
上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...
- 【Zabbix】CentOS6.9系统下部署Zabbix-agent
目录 安装Zabbix-agent 1.安装YUM源 2.安装Zabbix agent端 3.配置zabbix_agentd.conf文件 4.启动zabbix agent服务 5.zabbix图形界 ...
- win2008R2环境配置
1)下载系统 [https://msdn.itellyou.cn/] 选择带sp1的,这个系统是08R2中较为完善的一种 2)安装之后首先不要激活和安装.net framework 先安装ii ...
- 第一册:lesson 111.
原文:The most expensive model. question:Can Mr.Frith buy the television on instalments? How does it wo ...
- JavaScript_02_JavaScript对象
ECMAScript标准中基本对象:Array,Boolean,Date,Math,Number,String,RegExp,Global Boolean,Date,Math,Number,Strin ...
- 通过hash实现前端路由
router.js //构造函数 function Router() { this.routes = {}; this.currentUrl = ''; } Router.prototype.rout ...