数据结构与算法-数组基础篇(第三、四天)

1.0066. 加一


class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        digits.insert(0,0)
        digits[len(digits)-1] += 1
        for i in range(len(digits)-1 , 0,-1):
            if digits[i] >9:
                digits[i-1]+=1
                digits[i]=0
            else:
                break
        if digits[0]==0:
            digits.pop(0)
        return digits

2.0724. 寻找数组的中心下标


class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        for i in range(0,len(nums)):
            sum_left = sum(nums[:i])
            sum_right = sum(nums[i+1:])
            # for l in range(0,i):
            #     sum_left += nums[l]
            # for m in range(i+1,len(nums)):
            #     sum_right += nums[m]
            if sum_left==sum_right:
                return i
        
        return -1    

3.0189. 轮转数组


class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        left ,right = 0 ,len(nums)-1
        k = k%len(nums)
        while left<right:
            nums[left] ,nums[right] = nums[right] ,nums[left]
            left +=1
            right -=1
        left_left ,left_right ,right_left ,right_right =0 ,k-1 ,k ,len(nums)-1 
        while left_left<left_right:
            nums[left_left] ,nums[left_right] = nums[left_right] ,nums[left_left]
            left_left +=1
            left_right -=1
        while right_left<right_right:
            nums[right_left], nums[right_right] =nums[right_right] ,nums[right_left]
            right_left +=1
            right_right -=1

4.0048. 旋转图像

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        up ,down =0 ,len(matrix)-1
        while up<down:
            for i in range(0,len(matrix[0])):
                matrix[up][i] ,matrix[down][i] = matrix[down][i] ,matrix[up][i]
            up +=1
            down -=1
        for i in range(0,len(matrix)):
            for j in range(i,len(matrix[0])):
                matrix[i][j] ,matrix[j][i] =matrix[j][i] ,matrix[i][j]

5.0054. 螺旋矩阵

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        list = []
        up ,down ,left ,right = 0 ,len(matrix)-1 ,0 ,len(matrix[0])-1
        while True:
            for i in range(left,right+1):
                list.append(matrix[up][i])
            up +=1
            if up>down:
                break
            for i in range(up,down+1):
                list.append(matrix[i][right])
            right -=1
            if left>right:
                break
            for i in range(right,left-1,-1):
                list.append(matrix[down][i])
            down -=1
            if up>down:
                break
            for i in range(down,up-1,-1):
                list.append(matrix[i][left])
            left +=1
            if left>right:
                break
        return list

6.0498. 对角线遍历

class Solution:
    def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:
        list =[]
        i ,j =0 ,0
        while i<len(mat) and j<len(mat[0]):
            list.append(mat[i][j])
            if (i+j)%2==0:
                if i == 0 and j!=len(mat[0])-1:
                    i ,j= i ,j+1
                elif j ==len(mat[0])-1:
                    i ,j= i+1 ,j
                else:
                    i ,j= i-1 ,j+1
            else:
                if j== 0 and i!=len(mat)-1:
                    i ,j= i+1 ,j
                elif i==len(mat)-1:
                    i ,j= i ,j+1
                else:
                    i ,j= i+1, j-1
        return list
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值