366. 斐波纳契数列:查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
给定 1,返回 0
给定 2,返回 1
给定 10,返回 34
参考答案:
def fibonacci(self, n):
# write your code here
i = 0
a,b =0, 1
while i < n-1:
a,b =b,a+b
i +=1
return a
9. Fizz Buzz 问题
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:
如果这个数被3整除,打印fizz.
如果这个数被5整除,打印buzz.
如果这个数能同时被3和5整除,打印fizz buzz.
比如 n = 15, 返回一个字符串数组:
[
"1", "2", "fizz",
"4", "buzz", "fizz",
"7", "8", "fizz",
"buzz", "11", "fizz",
"13", "14", "fizz buzz"
]
参考答案:
def fizzBuzz(self, n):
# write your code here
result = []
for i in range(1,n+1):
if i %15 ==0:
result.append('fizz buzz')
elif i%5==0:
result.append('buzz')
elif i%3==0:
result.append('fizz')
else:
result.append(str(i))
return result
157. 判断字符串是否没有重复字符
实现一个算法确定字符串中的字符是否均唯一出现
给出"abc",返回 true
给出"aab",返回 false
参考答案:
def isUnique(self, str):
results = []
new_results = []
for i in str:
results.append(i)
for i in str:
if i not in new_results:
new_results.append(i)
if results==new_results:
return True
else:
return False
172. 删除元素
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]
参考答案:
def removeElement(self, A, elem):
i = 0
n = len(A)
while i<n:
if A[i]==elem:
n-=1
del A[i]
else:
i+=1
return n
6. 合并排序数组
合并两个排序的整数数组A和B变成一个新的数组。
给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
参考答案:
def mergeSortedArray(self, A, B):
for i in range(len(A)):
B.append(A[i])
B = sorted(B)
return B
463. 整数排序
给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。
对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。
参考答案:
def sortIntegers(self, A):
n = len(A)
for i in range(n-1):
temp=i
for j in range(i+1,n):
if A[j]<A[temp]:
A[j],A[temp]=A[temp],A[j]
A[temp],A[i]=A[i],A[temp]
print(A)
100. 删除排序数组中的重复数字
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
参考答案:
循环数组,找到下一个元素A[i+1]等于A[i],就删除A[i+1],
注意的是循环次数需要 -1,避免索引超限。
def removeDuplicates(self, A):
i = 0
while i < len(A)-1:
if A[i] == A[i+1]:
A.remove(A[i])
else:
i += 1
return len(A)
101. 删除排序数组中的重复数字 II
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
参考答案:
允许重复一次,则直接检查元素A[i+2]是否等于A[i]即可,
因为如果A[i+2]等于A[i],那么A[i+1]也等于A[i],
此时删除A[i+2]即可。
当然,循环次数需要 -2
def removeDuplicates(self, nums):
i = 0
while i < len(nums)-2:
if nums[i] == nums[i+2]:
nums.remove(nums[i])
else:
i += 1
return len(nums)
2. 尾部的零
设计一个算法,计算出n阶乘中尾部零的个数
11! = 39916800,因此应该返回 2
参考答案:
对于n!来说,每当有5,必出现一个零,所以其实计算n以内有多少个5即可。
if n == 0 :
return 1
x = 1
while n>5:
x += n/5
n = n/5
return x-1
所谓的斐波纳契数列是指:
前2个数是 0 和 1 。
第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
给定 1,返回 0
给定 2,返回 1
给定 10,返回 34
参考答案:
def fibonacci(self, n):
# write your code here
i = 0
a,b =0, 1
while i < n-1:
a,b =b,a+b
i +=1
return a
9. Fizz Buzz 问题
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:
如果这个数被3整除,打印fizz.
如果这个数被5整除,打印buzz.
如果这个数能同时被3和5整除,打印fizz buzz.
比如 n = 15, 返回一个字符串数组:
[
"1", "2", "fizz",
"4", "buzz", "fizz",
"7", "8", "fizz",
"buzz", "11", "fizz",
"13", "14", "fizz buzz"
]
参考答案:
def fizzBuzz(self, n):
# write your code here
result = []
for i in range(1,n+1):
if i %15 ==0:
result.append('fizz buzz')
elif i%5==0:
result.append('buzz')
elif i%3==0:
result.append('fizz')
else:
result.append(str(i))
return result
157. 判断字符串是否没有重复字符
实现一个算法确定字符串中的字符是否均唯一出现
给出"abc",返回 true
给出"aab",返回 false
参考答案:
def isUnique(self, str):
results = []
new_results = []
for i in str:
results.append(i)
for i in str:
if i not in new_results:
new_results.append(i)
if results==new_results:
return True
else:
return False
172. 删除元素
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]
参考答案:
def removeElement(self, A, elem):
i = 0
n = len(A)
while i<n:
if A[i]==elem:
n-=1
del A[i]
else:
i+=1
return n
6. 合并排序数组
合并两个排序的整数数组A和B变成一个新的数组。
给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
参考答案:
def mergeSortedArray(self, A, B):
for i in range(len(A)):
B.append(A[i])
B = sorted(B)
return B
463. 整数排序
给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。
对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。
参考答案:
def sortIntegers(self, A):
n = len(A)
for i in range(n-1):
temp=i
for j in range(i+1,n):
if A[j]<A[temp]:
A[j],A[temp]=A[temp],A[j]
A[temp],A[i]=A[i],A[temp]
print(A)
100. 删除排序数组中的重复数字
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
参考答案:
循环数组,找到下一个元素A[i+1]等于A[i],就删除A[i+1],
注意的是循环次数需要 -1,避免索引超限。
def removeDuplicates(self, A):
i = 0
while i < len(A)-1:
if A[i] == A[i+1]:
A.remove(A[i])
else:
i += 1
return len(A)
101. 删除排序数组中的重复数字 II
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
参考答案:
允许重复一次,则直接检查元素A[i+2]是否等于A[i]即可,
因为如果A[i+2]等于A[i],那么A[i+1]也等于A[i],
此时删除A[i+2]即可。
当然,循环次数需要 -2
def removeDuplicates(self, nums):
i = 0
while i < len(nums)-2:
if nums[i] == nums[i+2]:
nums.remove(nums[i])
else:
i += 1
return len(nums)
2. 尾部的零
设计一个算法,计算出n阶乘中尾部零的个数
11! = 39916800,因此应该返回 2
参考答案:
对于n!来说,每当有5,必出现一个零,所以其实计算n以内有多少个5即可。
if n == 0 :
return 1
x = 1
while n>5:
x += n/5
n = n/5
return x-1