From b9f7c98a9f2c07f996e11b143ed69d46b2b9cbaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Sun, 30 Sep 2018 23:42:49 +0800 Subject: [PATCH] Create 367. Valid Perfect Square.md --- 367. Valid Perfect Square.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 367. Valid Perfect Square.md diff --git a/367. Valid Perfect Square.md b/367. Valid Perfect Square.md new file mode 100644 index 0000000..b9d9775 --- /dev/null +++ b/367. Valid Perfect Square.md @@ -0,0 +1,22 @@ +# [367. Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/description/) +# 思路 +题目要求判断一个数是否是一个某个数的平方。要求不能调用库里的sqrt函数。 +可以考虑二分搜索1到num/2范围的数mid, 判断mid的平方是否等于num。 +注意:如果直接计算`if(mid * mid == num)` 会存在溢出的情况,所以应该`if(num % mid == 0 && num / mid == mid)`。 +# C++ +``` +class Solution { +public: + bool isPerfectSquare(int num) { + if(num == 1) return true; + int low = 1, high = num / 2, mid; + while(low <= high){ + mid = (low + high) / 2; + if(num % mid == 0 && num / mid == mid) return true; + if(mid <= num / mid) low = mid + 1; + else high = mid - 1; + } + return false; + } +}; +```