# [LeetCode Golang] 566. Reshape the Matrix 的golang实现

miltonsun · · 430 次点击 · · 开始浏览

LeetCode 566. Reshape the Matrix
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:
The height and width of the given matrix is in range [1, 100].
The given r and c are all positive.

r和c都是正数

## 代码

reshapeMatrix.go

``````import "fmt"

func MatrixReshape(nums [][]int, r int, c int) [][]int {
var chanInt chan int
chanInt = make(chan int)

var length int
go func(len *int) {
for _, v1 := range nums {
for _, v := range v1 {
(*len)++
fmt.Printf("len1:%+v\n", length)
chanInt <- v
}
}

for {
chanInt <- 0
}
}(&length)

var ret [][]int
for i := 0; i < r; i++ {
var lineRet []int
for j := 0; j < c; j++ {
v := <- chanInt

lineRet = append(lineRet, v)
}
ret = append(ret, lineRet)
}

fmt.Printf("len2:%+v\n", length)
fmt.Printf("ret:%+v\n", ret)
if r * c != length {
return nums
}

return ret
}
`````` 0 回复

• 请尽量让自己的回复能够对别人有帮助
• 支持 Markdown 格式, **粗体**、~~删除线~~、``单行代码``
• 支持 @ 本站用户；支持表情（输入 : 提示），见 Emoji cheat sheet
• 图片支持拖拽、截图粘贴等方式上传

LeetCode 566. Reshape the Matrix
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:
The height and width of the given matrix is in range [1, 100].
The given r and c are all positive.

r和c都是正数

## 代码

reshapeMatrix.go

``````import "fmt"

func MatrixReshape(nums [][]int, r int, c int) [][]int {
var chanInt chan int
chanInt = make(chan int)

var length int
go func(len *int) {
for _, v1 := range nums {
for _, v := range v1 {
(*len)++
fmt.Printf("len1:%+v\n", length)
chanInt <- v
}
}

for {
chanInt <- 0
}
}(&length)

var ret [][]int
for i := 0; i < r; i++ {
var lineRet []int
for j := 0; j < c; j++ {
v := <- chanInt

lineRet = append(lineRet, v)
}
ret = append(ret, lineRet)
}

fmt.Printf("len2:%+v\n", length)
fmt.Printf("ret:%+v\n", ret)
if r * c != length {
return nums
}

return ret
}
``````