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& ...
随机推荐
- CentOS开发ASP.NET Core入门教程
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9891346.html 因为之前一直没怎么玩过CentOS,大多数时间都是使用Win10进行开发,然后程序 ...
- C#版 - Leetcode 191. Number of 1 Bits-题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- mac电脑进行可见光通信实验要点
lifi作为一个入门门槛低.涉及范围广的实验,在理工高校中还是比较流行的. 通常实验分成3个部分,字符数据传输实验.音频传输实验.视频传输实验.在官方的实验指南中指定使用win7x64或者win xp ...
- 两种方法操作其它mac应用的窗口
(图文基本无关) 如果单纯说简单方便,其使用AppleScript更好,特别是现在有了JS的加入,比如: (* This Apple script will resize any program wi ...
- [工具]PyCharm激活、注册码无效解决办法
前言 我是个 Pythoner,开发工具一直使用的 JetBrains 的 PyCharm.我师傅告诉过我:一个程序员一定要有一个用的很 6 的 IDE,你的开发效率会提高很多,很多... 我从小白的 ...
- 如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)
前言 对于程序员来说,很多时候,我们都在造房子,从学会框架或者是学会构建整个项目之后,慢慢的我们就会觉得自己在做的事情是一种重复劳动,很多时候只不过是换个面孔而已.而更快的造房子,造好看的房子可能是进 ...
- 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计
配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...
- 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是痞子衡<ARM Cortex-M文件那些事>主 ...
- VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
AlbumView控件 一. 样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的“Smobiler Components”拖动一个AlbumView控件到窗体界面上 修改 ...
- php-fpm 的优化
pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = ...