難度:簡單/Easy
序號與題目:69——x的平方根
實現 int sqrt(int x) 函數。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回類型是整數,小數部分將被捨去。
思考:採用牛頓迭代法尋求的解,給出迭代公式,當時,我們得到
實現:
C
int mySqrt(int x)
{
if(x<=1)
return x;
long long r=x; //設r爲long long類型,是爲了防止 (r+x/r)/2 溢出
while(r>x/r)
r=(r+x/r)/2;
return r;
}
C++
class Solution
{
public:
int mySqrt(int x)
{
if(x<=1)
return x;
long long r=x; //設r爲long long類型,是爲了防止 (r+x/r)/2 溢出
while(r>x/r)
r=(r+x/r)/2;
return r;
}
};
Java
class Solution
{
public int mySqrt(int x)
{
if(x<=1)
return x;
long r=x;
while(r>x/r)
r=(r+x/r)/2;
return (int) r;
}
}
Python
class Solution:
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
if x <= 1:
return x
r = x
while r > x / r:
r = (r + x / r) // 2
return int(r)
序號與題目:70——爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1. 1 階 + 1 階
2. 2 階
示例 2:
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
1. 1 階 + 1 階 + 1 階
2. 1 階 + 2 階
3. 2 階 + 1 階
示例 3:
輸入: 4
輸出: 5
解釋: 有五種方法可以爬到樓頂。
1. 1 階 + 1 階 + 1 階 + 1 階
2. 1 階 + 1 階 + 2 階
3. 1 階 + 2 階 + 1 階
4. 2 階 + 1 階 + 1 階
5 2 階 + 2 階
思考:當n=1時,有1種,當n=2時,有2種,當n=3時,有3種,當n=4時,有5種,當n=5時,有8種,所以你會發現這是一個類斐波那契數列{1,2,3,5,8.....}。
實現:
C
int climbStairs(int n)
{
if(n==0)
{
return 0;
}
int a = 0;
int b = 1;
for(int i = 0; i < n; i++)
{
int c = a;
a = b;
b = c + b;
}
return b;
}
C++
class Solution
{
public:
int climbStairs(int n)
{
if(n==0)
{
return 0;
}
int a = 0;
int b = 1;
for(int i = 0; i < n; i++)
{
int c = a;
a = b;
b = c + b;
}
return b;
}
};
Java
class Solution {
public int climbStairs(int n)
{
if(n==0)
{
return 0;
}
int a = 0;
int b = 1;
for(int i = 0; i < n; i++)
{
int c = a;
a = b;
b = c + b;
}
return b;
}
}
Python
class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
if n==0:
return 0;
a = 0;
b = 1;
for i in range(0,n):
c = a;
a = b;
b = c + b;
return b;