• leecode#x平方根#爬楼梯


    题目描述:

    给你一个非负整数 x ,计算并返回 x 的 算术平方根

    由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

    注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 

    分析:

    法一「袖珍计算器算法」是一种用指数函数 exp 和对数函数 ln 代替平方根函数的方法。

    代码:

    1. import math
    2. #x的算术平方根
    3. class Solution:
    4. def mySqrt(self, x: int) -> int:
    5. if x == 0:
    6. return 0
    7. ans = int(math.exp(0.5 * math.log(x)))
    8. return ans+1 if (ans+1)**2 <= x else ans
    9. s = Solution()
    10. a = s.mySqrt(15)
    11. print(a)

    分析:

    法二:二分查找法:由于 x 平方根的整数部分ans 是满足 k^2 ≤x 的最大 k 值,因此我们可以对 k进行二分查找,从而得到答案。

    二分查找的下界为 0,上界可以粗略地设定为 x。在二分查找的每一步中,我们只需要比较中间元素 mid 的平方与 x的大小关系,并通过比较的结果调整上下界的范围。

    代码:

    1. class Solution:
    2. def mySqrt(self, x: int) -> int:
    3. a,b,ans = 0,x,-1
    4. while a <= b:
    5. mid = (a + b)//2
    6. if mid * mid <= x:
    7. ans = mid
    8. a=mid + 1
    9. else:
    10. b=mid - 1
    11. return ans

    返回int类型函数时:

    return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。
    return -1::表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败;

    题目描述:

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    分析:

    动态规划:f(x)表示爬到第x级台阶的方案数,f(x) = f(x-1) + f(x-2),意味着爬到第x阶方案数等于x-1阶加上x-2阶方案数。f(0)=1,f(1)=1,表示从0级爬到0级一种方案,从0级爬到1级1种方案。有了这两个边界条件,就可以向后推导n级正确结果。

    代码:

    1. class Solution:
    2. def climbStairs(self, n: int) -> int:
    3. a,b,c,i= 0,0,1,1
    4. while(i <= n):
    5. a = b #a表示爬o级台阶,b表示爬1级台阶
    6. b = c
    7. c = a + b
    8. i += 1
    9. return c

     

  • 相关阅读:
    C语言的头文件
    周志华机器学习(6):支持向量机
    [ Linux ] 冯诺依曼体系结构 操作系统(OS)
    数据库之元数据
    榕树贷款元数据接入支持 T+1 和近实时两种方式
    基于AVDTP信令分析蓝牙音频启动流程
    Sonatype Nexus3 搭建私有仓库
    专家解读 | 电力行业关基测评安全防护新挑战
    2023.11.9 IDEA 配置 Lombok
    全栈开发性能优化基础第二单元日考技能
  • 原文地址:https://blog.csdn.net/weixin_44267765/article/details/127958880