题目:You're a square!
题目描述:
Given an integral number, determine if it's a square number:
In mathematics, a square number or perfect square is an integer that is the square of an integer; in other words, it is the product of some integer with itself.
样例:
-1 => false
0 => true
3 => false
4 => true
25 => true
26 => false
个人部分
解题思路:
这是一道入门级的题目,题目就是让你判断一个数字是否可以通过某个整数的平方表示。所以我们只需要调用JS中的Math.sqrt()函数对传来的数进行开方。判断结果是否为整数即可。
但JS的基本数据类型中,不会区分float和int。数值都是number类型。因此我们还需要对开放结果进行判断,判断结果是整数还是浮点数。故使用Number对象的toFixed方法,去掉小数部分后,判断其结果是否等于开方结果。因为toFixed方法返回的是string类型。因此我们使用==运算符,不判断类型即可。(这个方法绕了个大弯,可以参考其他解法里面的第三个)
代码:
function isSquare(s) {
return Math.sqrt(s).toFixed(0) == Math.sqrt(0)
}
大佬部分
其他大佬解法
不得不说自己还是太菜了,看完其他大佬解法,瞬间觉得自己好蠢
1. 对1求余
要判断一个数字是整数还是小数,我们只要对1求余即可,所有整数对1求余都会等于0。而小数对1求余将得到小数部分。所以我们只要将开方结果对1求余即可。
function isSquare(n) {
return Math.sqrt(n) % 1 === 0;
}
2.使用isInteger方法
JS的Number对象内置判断是否为整型的函数。使用该方法判断即可。
const isSquare = n => Number.isInteger(Math.sqrt(n));
3.使用floor方法取整判断
方法与我的类似,都是取整后判断是否与结果相等,不过这里可以直接用floor函数向下取整(我是傻*)。
function isSquare(s) {
return Math.floor(Math.sqrt(s)) == Math.sqrt(s)
}
4.使用正则(脑洞真大)
讲实话,使用正则匹配去判断开方结果是我没想到的。但是不知道这里使用正则会不会比前面几种方法更好(个人觉得不会),只是觉得这种方法很有意思,很有想法,所以做此纪录。
var isSquare = function(n){
return /^[0-9]+$/.test(Math.sqrt(n))
}