数据结构与算法 (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]]

相关推荐