0566. Reshape the Matrix

566. Reshape the Matrix #

Problem #

In MATLAB, there is a very useful function called ‘reshape’, which can reshape a matrix into a new one with different size but keep its original data.

You’re given a matrix represented by a two-dimensional array, and two positive integers r and crepresenting the row number and column number of the wanted reshaped matrix, respectively.

The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as they were.

If the ‘reshape’ operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.

Example 1:

Input: 
nums = 
[[1,2],
 [3,4]]
r = 1, c = 4
Output: 
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.

Example 2:

Input: 
nums = 
[[1,2],
 [3,4]]
r = 2, c = 4
Output: 
[[1,2],
 [3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.

Note:

  1. The height and width of the given matrix is in range [1, 100].
  2. The given r and c are all positive.

Problem Summary #

In MATLAB, there is a very useful function called reshape, which can reshape a matrix into a new matrix with a different size while preserving its original data.

Given a matrix represented by a two-dimensional array, and two positive integers r and c, representing the number of rows and columns of the desired reshaped matrix, respectively. The reshaped matrix needs to be filled with all elements of the original matrix in the same row-traversing order. If the reshape operation with the given parameters is possible and valid, output the new reshaped matrix; otherwise, output the original matrix.

Solution Approach #

  • Given a two-dimensional array and r, c, “reshape” this two-dimensional array into one with r rows and c columns. If it can be “reshaped”, output the “reshaped” array; if it cannot be “reshaped”, output the original array.
  • This problem is also straightforward; just simulate according to the problem statement.

Code #


package leetcode

func matrixReshape(nums [][]int, r int, c int) [][]int {
	if canReshape(nums, r, c) {
		return reshape(nums, r, c)
	}
	return nums
}

func canReshape(nums [][]int, r, c int) bool {
	row := len(nums)
	colume := len(nums[0])
	if row*colume == r*c {
		return true
	}
	return false
}

func reshape(nums [][]int, r, c int) [][]int {
	newShape := make([][]int, r)
	for index := range newShape {
		newShape[index] = make([]int, c)
	}
	rowIndex, colIndex := 0, 0
	for _, row := range nums {
		for _, col := range row {
			if colIndex == c {
				colIndex = 0
				rowIndex++
			}
			newShape[rowIndex][colIndex] = col
			colIndex++
		}
	}
	return newShape
}


Calendar Jun 25, 2026
Edit Edit this page
Total visits:   You are visitor No.
中文