作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?
69. X的平方根
-
题目要求:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 -
示例:
输入: 4
输出: 2
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
- 分析:
方法一:利用库函数求解
class Solution:
def mySqrt(self, x):
return x**0.5
方法二:使用二分法
def mysqrrt(self,x):
low = 0
high = x
ans = 0
while low<=high:
mid = (low+high)//2
if (mid*mid<=x):
ans =mid
low =mid+1
else:
high =mid-1
return ans
70. 爬楼梯
-
题目要求:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。 -
示例:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
- 分析:
动态规划:n个台阶,一开始可以爬 1 步,也可以爬 2 步,那么n个台阶爬楼的爬楼方法就等于 一开始爬1步的方法数 + 一开始爬2步的方法数,这样我们就只需要计算n-1个台阶的方法数
和n-2个台阶方法数,同理,计算n-1个台阶的方法数只需要计算一下n-2个台阶和n-3个台阶,计算n-2个台阶需要计算一下n-3个台阶和n-4个台阶……
class Solution:
def climbStairs(self, n):
if n==1:
return 1
sum=[0]*(n+1)
sum[1]=1
sum[2]=2
i =3
while(i<=n):
sum[i]=sum[i-2]+sum[i-1]
i=i+1
return sum[n]
83. 删除排序链表中的重复元素
-
题目要求:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 -
示例:
输入: 1->1->2
输出: 1->2
输入: 1->1->2->3->3
输出: 1->2->3
- 分析:
由于题目已经给定了是排序的链表,所以只要比较前后的值是否相等即可
class Solution:
def deleteDuplicates(self, head):
current =head
while(current and current.next):
if current.next.val ==current.val:
current.next=current.next.next
else:
current=current.next
return head