一、如图,该题要求将数组代表的数字加一。题目保证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
编译执行结果:
可见我们成功删除了重复的节点。代码正确。