题目1:Plus one
给一个数组,数组组成的一个整数加一,并将这个整数再展开为一个数组
如:input : [1, 2, 3, 4]
output: [1, 2, 3, 5]
思路:有两种思路,第一种是将数组转成一个整数,加一得到新的整数,再展开为数组;第二种是直接在数组的结构中进行操作
第一种思路比较简单,只需要进行数字运算即可得到,时间复杂度我就不算了哼唧
第二种思路也比较简单,但是要考虑到以下几点:
1、考虑当数字是9的时候的处理
2、当最前面的数字是9的时候的处理
附上看了别人的答案之后的我的答案:
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
i = len(digits)-1
while i>=0:
if digits[i] < 9:
digits[i] += 1
return digits
else:
digits[i] = 0
i -= 1
new_digits = [1]
for j in digits:
new_digits.append(j)
return new_digits
小结:思路不难,但是要在下手前想好怎么把所有的情况考虑清楚,并把它们合并到尽量少的代码和逻辑上来。
题目2:Merge Sorted Array
把两个已经排好序的数组整合为一个升序的数组。
思路:这道题不难,就是对二者从最后一个数开始进行比较,把数从数组1的最后一项开始加入。还是使用两个point进行处理,一个n指向数组1的最后那个数,一个m指向数组2的最后那个数,当数组有数要插入时,才移动,否则不懂。如果数组1的数全部加入之后,数组2还有数,则全部加到数组1的前n项中。
下面是代码:
def merge(self, nums1, m, nums2, n):
while m > 0 and n > 0:
if nums1[m-1] >= nums2[n-1]:
nums1[m+n-1] = nums1[m-1]
m -= 1
else:
nums1[m+n-1] = nums2[n-1]
n -= 1
if n > 0:
nums1[:n] = nums2[:n]
小结:这里主要是还是不熟悉python里面的一些自带的数据结构的特性,比如说python里面list的切片特性,这一点要善于利用才行哦
题目3:Pascal’ triangle
思路:
每一行(除了第一行以外)都可以确定第1个数和最后一个数为1,其余位置j则为上一层的第j-1项之和得到,这很容易实现为代码。但有两点需要注意的:
1、如果input 为 0 的时候,则直接返回一个空的list 这个要放出来单独讨论
2、还是代码简洁的问题
以下是自己的代码和别人的代码的区别,时间复杂度是一样的,但是别人的代码显得就整洁很多。
自己的:
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
re_list = []
if numRows==0:
return re_list
re_list.append([1])
for i in range(1, numRows):
in_list = []
for j in range(i+1):
if j==0 or j == (i):
in_list.append(1)
else:
in_list.append(re_list[i-1][j-1]+re_list[i-1][j])
re_list.append(in_list)
return re_list
别人的:
def generate(numRows):
pascal = [[1]*(i+1) for i in range(numRows)]
for i in range(numRows):
for j in range(1,i):
pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]
return pascal
well 今天得到的启发就是
1、考虑极端情况:0,1,最后数字
2、考虑代码的整洁性