LeetCode刷題——9th

難度:簡單/Easy

序號與題目:69——x的平方根

實現 int sqrt(int x) 函數。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:
輸入: 4
輸出: 2

示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842..., 
     由於返回類型是整數,小數部分將被捨去。

思考:採用牛頓迭代法尋求x^{_{2}}-n=0的解,給出迭代公式x{_{k+1}}=\frac{1}{2}(x{_{k}}+\frac{n}{x_{k}}),當\left | x_{k+1}-x_{k} \right |<1時,我們得到\left \lfloor x_{k+1} \right \rfloor=\left \lfloor\sqrt{n} \right \rfloor

實現:

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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章