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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值