2019-07-30[日三省吾身] LeetCode69 Mysqrt

寫在前面:

作為一個編程小白打算通過LeetCode刷題自學C++,特此不定期記錄整理解題思路。


題目一:

實現(xiàn) int sqrt(int x) 函數(shù)。計算并返回 x 的平方根,其中 x 是非負整數(shù)。
由于返回類型是整數(shù),結(jié)果只保留整數(shù)的部分,小數(shù)部分將被舍去。

示例 1:
輸入: 4;輸出: 2
示例 2:
輸入: 8;輸出: 2
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sqrtx


第一次嘗試:

思路:非常簡單的思路,利用return來終止遍歷,舍去小數(shù)部分的處理也利用了整數(shù)的特性。一開始i設(shè)置成了int型,后來發(fā)現(xiàn)有符號整數(shù)長度不夠還多余,改成了unsigned int。
后續(xù)還需要再做改進。

class Solution {
public:
    int mySqrt(int x) {
        for(unsigned int i=0;i<=x;i++)
        {
            if (i*i== x)
            {
                return i;
            }
            else if (i*i>x)
            {
                return i-1;
            }
            continue;
        }
        return 0;
    }
};

執(zhí)行用時:24ms;內(nèi)存消耗 8.2MB


題目二:

給定一個正整數(shù) num,編寫一個函數(shù),如果 num 是一個完全平方數(shù),則返回 True,否則返回 False。
說明:不要使用任何內(nèi)置的庫函數(shù),如 sqrt。

示例 1:
輸入:16;輸出:True
示例 2:
輸入:14;輸出:False
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-perfect-square


第一次嘗試:

思路:依舊是非常簡單明了的思路。
后續(xù)打算嘗試一下二分法。

class Solution {
public:
    bool isPerfectSquare(int num) {
        for (unsigned int i = 0; i <= num/2+1; i++)
        {
            if (i*i == num)
            {
                return true;
            }
               continue;
    }
        return false;
    }
};

執(zhí)行用時 :868 ms;內(nèi)存消耗 :8.2 MB


題目二:

實現(xiàn) pow(x, n) ,即計算 x 的 n 次冪函數(shù)。

示例 1:
輸入: 2.00000, 10;輸出: 1024.00000
示例 2:
輸入: 2.10000, 3;輸出: 9.26100
示例 3:
輸入: 2.00000, -2;輸出: 0.25000;解釋: 2-2 = 1/22 = 1/4 = 0.25

說明:
-100.0 < x < 100.0
n 是 32 位有符號整數(shù),其數(shù)值范圍是 [?231, 231 ? 1] 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/powx-n


第一次嘗試:

思路:以下代碼嘗試失敗,由于部分運算超時,沒有考慮效率。后續(xù)可以把上述求根的算法集成進下面代碼中進行優(yōu)化和運算簡化。

class Solution {
public:
    double myPow(double x, int n) {
        if (n==0){
            x = 1;
        }
        else if (n > 0){
            for(int i = 0; i<n ;i++){
                mul = mul*x;
            }
            x = mul;
        }
        else if (n < 0){
            for(int i = 0; i<-n ;i++){
                mul = mul*1/x;
            }
            x = mul;
        }
        return x;
    }
public:
    double mul = 1;
};

待續(xù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容