Reshaping a matrix
874th solved. Goal is to transform a matrix AxB into another one CxD. First if the dimensions don't match (A*B != C*D) then you just return the original matrix. Otherwise you do a pass on CxD and keep a row and col variables tracking the first matrix, changing them accordingly. Code is down below, cheers, ACC.
Oh, and here is me in the ACM collegiate contest, some time in a different century...
In MATLAB, there is a handy function called reshape which can reshape an m x n matrix into a new one with a different size r x c keeping its original data.
You are given an m x n matrix mat and two integers r and c representing the row number and column number of the wanted reshaped matrix.
The reshaped matrix should 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: mat = [[1,2],[3,4]], r = 1, c = 4 Output: [[1,2,3,4]]
Example 2:

Input: mat = [[1,2],[3,4]], r = 2, c = 4 Output: [[1,2],[3,4]]
Constraints:
m == mat.lengthn == mat[i].length1 <= m, n <= 100-1000 <= mat[i][j] <= 10001 <= r, c <= 300
public int[][] MatrixReshape(int[][] mat, int r, int c)
{
if (mat.Length * mat[0].Length != r * c) return mat;
int[][] retVal = new int[r][];
for (int i = 0; i < r; i++) retVal[i] = new int[c];
int row = 0;
int col = 0;
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
retVal[i][j] = mat[row][col];
col++;
if (col == mat[0].Length)
{
row++;
col = 0;
}
}
}
return retVal;
}

Comments
Post a Comment