首页 软件代码

LeetCode-数据结构-数组-第4天


566. 重塑矩阵

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
具体题目链接

Python

class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        if r*c!=len(mat)*len(mat[0]):
            return mat
        ans,ans_r,t=[],[],0
        for i in mat:
            for j in i:
                ans_r.append(j)
                t+=1
                if t==c:
                    t=0
                    ans.append(ans_r)
                    ans_r=[]
        return ans

思路:简单题。每循环c个则创建一个ans_r,并将列表添加到ans中。

GO

func matrixReshape(nums [][]int, r int, c int) [][]int {
    n, m := len(nums), len(nums[0])
    if n*m != r*c {
        return nums
    }
    ans := make([][]int, r)
    for i := range ans {
        ans[i] = make([]int, c)
    }
    for i := 0; i < n*m; i++ {
        ans[i/c][i%c] = nums[i/m][i%m]
    }
    return ans
}

思路:这个思路很厉害,通过一次m*n的遍历,通过除数和商形式实现换行形式。

118. 杨辉三角

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
具体题目链接

Python

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        ret = []
        for i in range(numRows):
            row = []
            for j in range(0, i + 1):
                if j == 0 or j == i:
                    row.append(1)
                else:
                    row.append(ret[i - 1][j] + ret[i - 1][j - 1])
            ret.append(row)
        return ret

思路:每一行的第一个和最后一个都是1,其余等于上方两个之和,采用列表形式来储存杨辉三角。

GO

func generate(numRows int) [][]int {
    ans := make([][]int, numRows)
    for i := range ans {
        ans[i] = make([]int, i+1)
        for j := 0; j <=i; j++ {
            if j==0 || j==i{
                ans[i][j] = 1
            }else{
                ans[i][j] = ans[i-1][j] + ans[i-1][j-1]
            }
        }
    }
    return ans
}

思路:参考python





文章评论

目录