第八周作业——三题

一、如图,该题要求将数组代表的数字加一。题目保证0不在数组开头。这题主要考虑的是进位问题。


这里有两种办法,一种是直接修改数组元素,再逐位判断是否需要进位;另一种是先将数组转化为对应整数,加一后再传回数组。考虑到复杂度,我采用第二种方法。代码如下:

digits = [1,2,3]
def plusOne(digits):
    print(digits)
    newd = []
    l = len(digits)
    sum = 0
    i = 1
    c = -1
    for d in digits:
        sum += i * digits[ c ]  #从最后一位开始处理
        i *= 10
        c -= 1
    s = str(sum+1)               #此时字符串为整数值加一
    for x in s:
        newd.append(x)         #传回数组
    print('[',end = '')
    for j in range(0,l-1):
        print(s[j] + ', ',end = '') 

    print(s[-1] + ']',end = '')     

#测试调用

plusOne(digits)


注:其中 end = '' 是为了阻止换行。这是本次实验我所学到的新东西,不过在部分编译器上不支持。


编译执行结果:


可以看出我们实现了数组加一,并且输出格式与原来一致。代码正确。








二、在一个m*n的矩阵里找到一个特定值,该矩阵每行的第一个数都大于上一行的最后一个数。


这题最简单的思路就是遍历二维列表,将列表中的值逐一与目标值比较。相同则设置标记值为1,然后if判断打印true;反之标记值不变,打印false。

matrix = [

    [1,3,5,7],
    [10,11,16,20],
    [23,30,34,50]
]
target = 3

def searchMatrix(matrix, target):
    flag = 0
    for c1 in range(0,len(matrix)):
        for c2 in range(0,len(matrix[c1])):
            if(target == matrix[c1][c2]):
                flag = 1
                break
    if(flag):
        print('true')
    else:
        print('false')
 #测试调用

searchMatrix(matrix, target)



编译执行结果:


可见我们实现了在二维数组中寻找某个特定数的功能。代码正确。


三、如图,该题要求从一个排序链表中删除重复节点。


在c++的学习中我们写过很多类似的题目,具体思路就是遍历链表,如果遇到相同元素就将其pop。

代码如下:

class Solution:
    def deleteDuplicates(self, head):
        if head is None:
            return head
        record = set([head.val])
        pre = head
        cur = head.next
        while cur:
            if cur.val in record:
                pre.next = cur.next
                cur = cur.next
            else:
                record.add(cur.val)
                pre = pre.next
                cur = cur.next
        return head


编译执行结果:

可见我们成功删除了重复的节点。代码正确。

猜你喜欢

转载自blog.csdn.net/qq_41356752/article/details/80052136