难度:简单/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;