给出一个由二维数组表示的矩阵,以及两个正整数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 算法合集地址












网友评论