寫在前面:
作為一個編程小白打算通過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ù)。