美文网首页
每日Leetcode—算法(8)

每日Leetcode—算法(8)

作者: Chuck_Wu | 来源:发表于2019-05-02 17:32 被阅读0次

    69.x的平方根

    计算并返回 x 的平方根,其中 x 是非负整数。
    由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

    输入: 8,输出: 2
    说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。

    算法一:

    def mySqrt(self, x: int) -> int:
        if x == 0:
            return 0
        if x == 1:
            return 1
        for i in range(2,x+1):
            if i**2<=x and (i+1)**2>x:
                a = i
            else:
                return a
    

    分析:该方法使用for循环进行查找,效率非常低

    算法二:

    def mySqrt(self, x: int) -> int:
        if x == 0:
            return 0
        if x == 1:
            return 1
        h = x
        l = 0
        while l<h:
            m = (l + h)//2
            if m**2<=x and (m+1)**2>x:
                return m
            if m**2 > x:
                h = m
            if m**2 < x:
                l = m
    

    分析:因为结果会从1,2,3...进行顺序查找,所以直接使用二分法。

    70. 爬楼梯

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    输入: 2,输出: 2
    解释: 有两种方法可以爬到楼顶。

    1. 1 阶 + 1 阶
    2. 2 阶

    输入: 3,输出: 3
    解释: 有三种方法可以爬到楼顶。

    1. 1 阶 + 1 阶 + 1 阶
    2. 1 阶 + 2 阶
    3. 2 阶 + 1 阶

    算法:

    def climbStairs(self, n: int) -> int:
        res = [0]*(n+1)
        res[0] = 1
        res[1] = 1
        for i in range(2,n+1):
            res[i] = res[i-2] + res[i-1]
        return res[n]
    

    分析:该问题是除了兔子问题之外,另一个满足斐波那契数列的问题,所以直接使用即可求出。

    相关文章

      网友评论

          本文标题:每日Leetcode—算法(8)

          本文链接:https://www.haomeiwen.com/subject/ddgnnqtx.html