码迷,mamicode.com
首页 > 编程语言 > 详细

【LeetCode】数组-5(566)-按照要求输出矩阵

时间:2017-08-18 22:24:57      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:linked   lin   input   add   矩阵   mat   return   条件   logs   

题目要求:

技术分享

思路一:借助队列,先顺序读入input矩阵,然后按照output要求向output矩阵输入

【正确代码】

 1 class Solution {
 2     public int[][] matrixReshape(int[][] nums, int r, int c) {
 3         int[][] res = new int[r][c];
 4         if (nums == null || nums.length * nums[0].length != r * c) {
 5             return nums;
 6         }
 7         Queue<Integer> queue = new LinkedList<>();
 8         for (int i = 0; i < nums.length; i++) {
 9             for (int j = 0; j < nums[0].length; j++) {
10                 queue.add(nums[i][j]);
11             }
12         }
13         for (int i = 0; i < r; i++) {
14             for (int j = 0; j < c; j++) {
15                 res[i][j] = queue.remove();
16             }
17         }
18         return res;
19     }
20 }

时间复杂度:O(m*n)

空间复杂度:O(m*n)

 

思路二:不借助辅助空间,直接根据output的要求向output矩阵输入

正常向output矩阵中读入数据,如果 cols > c 的话,rows++

【正确代码】(蓝色标记处,第一次写时出错)

 1 class Solution {
 2     public int[][] matrixReshape(int[][] nums, int r, int c) {
 3         int[][] res = new int[r][c];
 4         if (nums == null || nums.length * nums[0].length != r * c) {
 5             return nums;
 6         }
 7         int rows = 0, cols = 0;
 8         for (int i = 0; i < nums.length; i++) {
 9             for (int j = 0; j < nums[0].length; j++) {
10                 res[rows][cols] = nums[i][j];
11                 cols++;
12                 if (cols >= c) {
13                     rows++;
14                     cols = 0;
15                 }
16             }
17         }
18         return res;
19     }
20 }

时间复杂度:O(m*n)

空间复杂度;O(m*n)

 

思路三:使用矩阵转换的公式 nums[n?i+j]

满足基本的 nums.length * nums[0].length == r * c 条件情况下,使用矩阵目前的 (长度/c )决定行数,(长度 % c)决定列数

【正确代码】(今天什么状态,刚刚又把count++给丢了「囧」)

 1 class Solution {
 2     public int[][] matrixReshape(int[][] nums, int r, int c) {
 3         int[][] res = new int[r][c];
 4         if (nums == null || nums.length * nums[0].length != r * c) {
 5             return nums;
 6         }
 7         int count = 0;
 8         for (int i = 0; i < nums.length; i++) {
 9             for (int j = 0; j < nums[0].length; j++) {
10                 res[count / c][count % c] = nums[i][j];
11                 count++;
12             }
13         }
14         return res;
15     }
16 }

时间复杂度:O(m*n)

空间复杂度:O(m*n)

【LeetCode】数组-5(566)-按照要求输出矩阵

标签:linked   lin   input   add   矩阵   mat   return   条件   logs   

原文地址:http://www.cnblogs.com/StoneLuo/p/7392368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!