>  기사  >  백엔드 개발  >  PHP에서 유효한 완전제곱수인지 확인하는 방법

PHP에서 유효한 완전제곱수인지 확인하는 방법

醉折花枝作酒筹
醉折花枝作酒筹원래의
2021-07-13 16:00:011508검색

양의 정수 num이 주어지면 num이 완전제곱수이면 True를 반환하고, 그렇지 않으면 False를 반환하는 함수를 작성하세요. 이때 우리는 무엇을 해야 합니까? 오늘은 편집자가 안내해드릴 예정이며, 필요하시면 참고하실 수 있습니다.

PHP에서 유효한 완전제곱수인지 확인하는 방법

양의 정수 num이 주어지면 num이 완전제곱수이면 True를 반환하고, 그렇지 않으면 False를 반환하는 함수를 작성하세요.

참고: sqrt와 같은 내장 라이브러리 함수를 사용하지 마세요.

예제 1:

输入:16
输出:True

예제 2:

输入:14
输出:False

해결책 아이디어 1

php는 pow 함수를 사용할 수 없습니다. Sao 연산은 ** 0.5입니다. 이렇게 하면 PHP5.6.0에서 0.5배를 곱합니다. 루트 번호와 동일한 효과로 시작됩니다.

Code

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))。

Code

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

이진 검색

Code

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으로 문의하세요.