IOS 算法(基础篇) ----- 重塑矩阵

给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

例子:

输入
nums =
[[1,2],
[3,4]]
r = 1, c = 4

输出
[[1,2,3,4]]

解释
行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。

输入
nums =
[[1,2],
[3,4]]
r = 2, c = 4
输出
[[1,2],
[3,4]]

解释
没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。

思路:

暴力法

题意, 不难理解, 我们可以按照题意机械翻译得到

1.判断nums元素个数与r,c元素个数是否相等
① 不等, 直接排除
② 相等, 循环插入新数组

未翻译版

class Solution {
    func matrixReshape(_ nums: [[Int]], _ r: Int, _ c: Int) -> [[Int]] {
        
        let sum = nums[0].count * nums.count, target = r * c
        if sum != target {
            return nums
        }
        
        var result:[[Int]] = [], temp:[Int] = []
        
        for arr in nums {
            for j in arr {
                temp.append(j)
                if temp.count == c {
                    result.append(temp)
                    temp.removeAll()
                }
            }
        }
        return result 
    }
}

翻译版

class Solution {
    func matrixReshape(_ nums: [[Int]], _ r: Int, _ c: Int) -> [[Int]] {
        
        // 得到nums元素个数, r,c 新矩阵元素个数
        let sum = nums[0].count * nums.count, target = r * c
        // 不相等直接返回
        if sum != target {
            return nums
        }
        
        // 相等, 遍历数组
        // temp 为新数组每一个行容器
        var result:[[Int]] = [], temp:[Int] = []
        for arr in nums {
            for j in arr {
                // j为nums中从左到右依次循环的元素
                // temp添加 j
                temp.append(j)
                // 如果temp"满了", 则换行继续添加
                if temp.count == c {
                    result.append(temp)
                    temp.removeAll()
                }
            }
        }
        // 返回
        return result 
    }
}

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

你可能感兴趣的:(IOS 算法(基础篇) ----- 重塑矩阵)