首頁  >  文章  >  後端開發  >  PHP如何判斷是否為有效的完全平方數

PHP如何判斷是否為有效的完全平方數

醉折花枝作酒筹
醉折花枝作酒筹原創
2021-07-13 16:00:011433瀏覽

給定一個正整數num,寫一個函數,如果num是完全平方數,則傳回True,否則傳回False。這時候我們該怎麼做?今天小編帶大家了解一下,有需要的可以參考參考。

PHP如何判斷是否為有效的完全平方數

給定一個正整數 num,寫一個函數,如果 num 是完全平方數,則回傳 True,否則回傳 False。

說明:不要使用任何內建的函式庫函數,如  sqrt。

範例1:

输入:16
输出:True

範例2:

输入:14
输出:False

解題思路1

php 不能使用 pow 函數,騷操作是 ** 0.5 這樣的方式,自乘0.5 次從 PHP5.6.0開始和根號效果一樣。

程式碼

class Solution {
    /** 
    * @param Integer $num 
    * @return Boolean 
    */
    function isPerfectSquare($num) {
        return $num**0.5 == (int)($num**0.5);
    }}

解題思路2

#利用完全平方數的性質,完全平方數是一系列奇數總和,例如:

1 = 1
4 = 1 + 3
9 = 1 + 3 + 5
16 = 1 + 3 + 5 + 7
25 = 1 + 3 + 5 + 7 + 9
36 = 1 + 3 + 5 + 7 + 9 + 11
....
1+3+...+(2n-1) = (2n-1 + 1) n/2 = n* n
时间复杂度为 O(sqrt(n))。

代碼

class Solution {
    /** 
    * @param Integer $num 
    * @return Boolean 
    */
    function isPerfectSquare($num) {
        $start = 1;
        while($num > 0)
        {
            $num -= $start;   // 累减到最后是 0 
            $start += 2;      // 每次 +2 保持是连续奇数
        }
        return $num == 0;
    }}

解題思路3

#二分查找

代碼

class Solution {
    /** 
    * @param Integer $num 
    * @return Boolean 
    */
    function isPerfectSquare($num) {
        $left = 0;
        $right = $num;
        while($left < $right)
        {
            $mid = $right - floor(($right-$left)/2);
            if ($mid * $mid == $num) {
                return true;
            } elseif ($mid * $mid > $num) {
                $right = $mid - 1;
            } else {
                $left = $mid + 1;
            }
        }
        return $left * $left == $num;
    }}

推薦學習:php影片教學

以上是PHP如何判斷是否為有效的完全平方數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn