leetcode day5 (2019.3.6)

题目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、考虑代码的整洁性

猜你喜欢

转载自blog.csdn.net/qq_39029148/article/details/88313693
今日推荐