【LeetCode刷題】-C++-簡單-69-x的平方根

Task:

在這裏插入圖片描述

思路:

【方法1】內置函數:

當然本題的初衷當然不是讓這樣做了,但是也要知道有一個內置函數可以用!
代碼:

class Solution {
public:
    int mySqrt(int x) {
        return sqrt(x);
    }
};

【方法2】二分查找:

思路就是:
(1)初始化邊界i和j
(2)找到中點mid= (i+j) / 2
(3)res= mid * mid和結果比大小,剛好等於就返回結果,其他情況下更新邊界,然後繼續循壞就好了!

class Solution {
public:
    int mySqrt(int x) {
        // 由於在計算的中間過程可能會出現數據溢出,所以要用long long類型
        long long i = 0;
        long long j = x / 2 + 1;//非負整數n的平方根是不會大於(n/2 +1)的
        while( i <= j){
            long long mid = (i+j)/2;
            long long res = mid * mid;
            if(res == x) return mid;
            else if( res<x ) i = mid + 1;
            else j = mid - 1;
        }
        return j;
    }
};

結果:
在這裏插入圖片描述

【方法3】牛頓法:

迭代法的效果要好太多,複雜度減少了而很多!

  • 思路:這裏牛頓法我不是很明白,關於res = (res + x/res) /2
  • 代碼:
class Solution {
public:
    int mySqrt(int x) {
        if (x==0) return 0;
        double last = 0;
        double res = 1;
        while(res!=last){
            last = res;
            res = (res + x/res) / 2;
        }
        return int(res);        
    }
};

  • 結果:
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章