数据结构与算法 (01)数组
# 作业1
"""
1. 利用动态数组解决数据存放问题
编写一段代码,要求输入一个整数N,用动态数组A来存放2~N之间所有5或7的倍数,输出该数组。
示例:
输入:
N = 100
输出:
5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100
"""
def getnumber(N):
a = []
for i in range(1,N+1):
if i % 5 == 0 or i % 7 == 0:
a.append(i)
return a
N = 100
print(getnumber(N))
输出:[5, 7, 10, 14, 15, 20, 21, 25, 28, 30, 35, 40, 42, 45, 49, 50, 55, 56, 60, 63, 65, 70, 75, 77, 80, 84, 85, 90, 91, 95, 98, 100]
# 作业2
"""
2. 托普利茨矩阵问题
如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。
给定一个M x N的矩阵,当且仅当它是托普利茨矩阵时返回True。
示例:
输入:
matrix = [
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
输出: True
"""
def tupl(matrix):
for i in range(len(matrix)-1):
for j in range(len(matrix[0])-1):
if matrix[i][j] != matrix[i+1][j+1]:
return False
return True
matrix = [
[1,2,3,4],
[5,1,2,3],
[9,5,1,2]
]
print(tupl(matrix))
True
# 作业3
def threesum(nums):
result = [] # 结果
nums.sort() # 排序
if len(nums)<3:
return []
for i in range(len(nums)):
if nums[i]>0:
break # 排序后第一个结果大于0,不可能有三个数之和为0
elif i>0 and nums[i] == nums[i-1]:
continue
L = i+1
r = len(nums)-1
while L <r:
if nums[i] + nums[L] + nums[r] == 0:
result.append([nums[i],nums[L],nums[r]])
L+=1
r-=1
elif nums[i] + nums[L] + nums[r] != 0:
L+=1
r-=1
return result
nums = [-1, 0, 1, 2, -1, -4]
print(threesum(nums))
已完成
执行用时: 20 ms
输入
[-1,0,1,2,-1,-4]
输出
[[-1,-1,2],[-1,0,1]]
预期结果
[[-1,-1,2],[-1,0,1]]