力扣刷题日记(5)

六、加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

原题: 传送门

今天也拿python 练练手~
题解:

class Solution(object):
def plusOne(self, digits):
    index = len(digits) -1 
    plusIn = 0
    while True:
        digits[index] += 1
        plusIn = digits[index] // 10
        digits[index] %= 10
        index -= 1 
        if((not plusIn)or(index<0)):
            break
    
    if(plusIn):
        digits.insert(0,1)
    
    return digits

简单来说,就是进位,嗯哼

109 / 109 个通过测试用例
状态:通过
执行用时:24 ms

嗯。。。速度比之前稍微有点进步,继续努力。

七、对角线遍历

给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。

示例:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

输出: [1,2,4,7,5,3,6,8,9]

解释:
力扣刷题日记(5)_第1张图片

说明:

给定矩阵中的元素总数不会超过 100000 。

原题: 传送门

题解:

	class Solution(object):
    def findDiagonalOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        if(len(matrix)==0 or len(matrix[0])==0):
            return []
        result = []
        m = len( matrix)
        n = len(matrix[0])
        count = m*n
        x = y = 0
        flag = True
        
        for i in range(count):
            result.append(matrix[x][y])

            if flag :
                x-=1
                y+=1
            else:
                x+=1
                y-=1

            if x>=m:
                x-=1
                y+=2
                flag = True
            elif y>=n:
                x+=2
                y-=1
                flag = False
                
            if x<0:
                x=0
                flag = False
            elif y<0:
                y=0
                flag =True

        return result

结果:
32 / 32 个通过测试用例
状态:通过
执行用时:200 ms

  嗯。。。就是奇偶的判断,然后进行坐标的变换 提取值塞进数组,最后返回

回见。

你可能感兴趣的:(算法笔记)