- 大家新年快乐!凌晨看每日一题还是2088,早上起来就是2022了~ ~ ~
- 每日一题:LeetCode:2022.将一维数组转变成二维数组
- 时间:2022-01-01
- 力扣难度:Easy
- 个人难度:Easy
- 数据结构:整型
- 算法:数学、模拟
2022-01-01:LeetCode:2022.将一维数组转变成二维数组
1. 题目描述
题目:原题链接
- 给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中所有元素创建一个 m 行 n 列的二维数组。
- original 中下标从 0 到 n - 1 (都包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都包含 )的元素构成二维数组的第二行,依此类推。
- 请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。
输入输出规范
- 输入:一维数组
- 输出:二维数组
输入输出示例
- 输入:original = [1,2,3,4], m = 2, n = 2
- 输出:[[1,2],[3,4]]
2. 方法:简单模拟
思路:公式推导并模拟
复杂度分析:m和n为输入的行和列数
- 时间复杂度:$O(m*n)$
- 空间复杂度:$O(1)$,除了输出外没有用到额外空间
题解:两层循环
1
2
3
4
5
6
7
8
9
10
11public int[][] construct2DArray(int[] original, int m, int n) {
if(original.length != m * n) return new int[][]{};
int[][] ans = new int[m][n];
int idx = 0;
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
ans[i][j] = original[idx++];
}
}
return ans;
}改进版:利用公式、一层循环
1
2
3
4
5
6
7
8
9
10
11
12public int[][] construct2DArray(int[] original, int m, int n) {
if (original == null || original.length == 0) return new int[0][0];
int len = original.length;
if (len != m * n) return new int[0][0];
int[][] res = new int[m][n];
for (int i = 0; i < len; i++) {
int row = i / n;
int col = i % n;
res[row][col] = original[i];
}
return res;
}
本文作者:
Chthollists
发布时间: 2022-01-01 16:58:26
最后更新: 2022-01-21 23:09:05
本文标题: 每日一题:LeetCode:2022.一维二维转换
本文链接: https://chthollists.github.io/post/62ba7774.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明作者和出处!
发布时间: 2022-01-01 16:58:26
最后更新: 2022-01-21 23:09:05
本文标题: 每日一题:LeetCode:2022.一维二维转换
本文链接: https://chthollists.github.io/post/62ba7774.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明作者和出处!
