天天看點

leetcode-367. 有效的完全平方數刷題筆記(c++)

寫在前面

  • 積累新的方式方法
  • 腦子轉不動了,扯皮扯的心好累,,,

題目詳情

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

說明:不要使用任何内置的庫函數,如  sqrt。

示例 1:
	輸入:16
	輸出:True
示例 2:
	輸入:14
	輸出:False
           
  • 新增知識點
    • boolalpha 可以使用單詞"true"和"false"進行輸入/輸出的布爾值.

    • boolalpha是頭檔案#include <iostream>中的一個函數,是把bool a = 1;

    • 測試代碼
      #include <iostream>
      using namespace std;
      int main()
      {
          bool flag = 1;
          // 輸出值: 1
          cout << flag << endl;
          // 輸出值: true
          cout << boolalpha << flag << endl;
          return 0;
      }
                 

ac代碼

  • 1. 二分法

class Solution {
public:
    bool isPerfectSquare(int num)
    {
        long long left = 0,right = num;
        long long squ, mid;
        while (left <= right)
        {
            mid = (left + right) / 2;
            squ = mid * mid;
            if (squ == num)
                return true;
            else if (squ > num)
                right = mid - 1;
            else
                left = mid + 1;
        }
        return false;
    }
};
           
  • 2. 局部疊代

    • 通過調試了解代碼運作狀态
    • 注意循環終止條件
class Solution {
public:
    bool isPerfectSquare(int num) {
        if(num == 1) return true;
        for(long long i = 2; i*i <= num; i ++){
            if(num%(i*i) == 0) {
                num = num/(i*i);
                i = 1;
            }
        }
        if(num == 1) return true;
        return false;
    }
};
           
  • 3. 普通解法

class Solution {
public:
    bool isPerfectSquare(int num)
    {
        if(num == 1)
            return true;
        bool flag = false;
        for(long long i = 2; i*i <= num; i ++)
        {
            if(i*i == num) {
                flag = true;
                break;
            }
        }
        return flag;
    }
};
           
  • 測試運作
#include <iostream>
using namespace std;

bool isPerfectSquare(int num)
{
    if(num == 1)
        return true;
    bool flag = false;
    for(long long i = 2; i*i <= num; i ++)
    {
        if(i*i == num)
        {
            flag = true;
            break;
        }
    }
    return flag;
}

int main()
{
    cout << boolalpha << isPerfectSquare(16);
    return 0;
}
           
  • 參考文章
    • LeetCode 367. 有效的完全平方數
    • LeetCode 367.有效的完全平方數(C++)