Skip to content

Commit 56f596f

Browse files
committed
feat: update solutions to lc problems: No.1255,2022
* No.1255.Maximum Score Words Formed by Letters * No.2022.Convert 1D Array Into 2D Array
1 parent b82c716 commit 56f596f

File tree

7 files changed

+66
-73
lines changed

7 files changed

+66
-73
lines changed

solution/1200-1299/1255.Maximum Score Words Formed by Letters/README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,13 @@
6767

6868
**方法一:二进制枚举**
6969

70-
对于给定的单词集合,我们可以使用二进制枚举的方法,枚举出所有的单词组合,然后判断每个单词组合是否满足题目要求,如果满足则计算其得分,最后取得分最大的单词组合。
70+
我们注意到题目的数据范围不大,因此对于给定的单词表,我们可以使用二进制枚举的方法,枚举出所有的单词组合,然后判断每个单词组合是否满足题目要求,如果满足则计算其得分,最后取得分最大的单词组合。
7171

72-
具体地,我们可以使用二进制的每一位来表示单词集合中的每一个单词是否被选中,如果第 $i$ 位为 $1$,则表示第 $i$ 个单词被选中,否则表示第 $i$ 个单词没有被选中。对于每一个二进制数,我们可以使用位运算来判断其对应的单词是否被选中。
72+
我们首先用哈希表或数组 $cnt$ 记录字母表 $letters$ 中每个字母出现的次数。
73+
74+
接下来,我们使用二进制枚举的方法,枚举出所有的单词组合。二进制的每一位表示单词表中的每一个单词是否被选中,如果第 $i$ 位为 $1$,则表示第 $i$ 个单词被选中,否则表示第 $i$ 个单词没有被选中。
75+
76+
然后我们统计当前单词组合中每个字母出现的次数,记录在哈希表或数组 $cur$ 中。如果 $cur$ 中的每个字母的出现次数都不大于 $cnt$ 中的对应字母的出现次数,则说明当前单词组合满足题目要求,我们计算当前单词组合的得分,取得分最大的单词组合。
7377

7478
时间复杂度 $(2^n \times n \times M)$,空间复杂度 $O(C)$。其中 $n$ 和 $M$ 分别为单词集合中单词的个数和单词的最大长度;而 $C$ 为字母表中字母的个数,本题中 $C=26$。
7579

solution/2000-2099/2022.Convert 1D Array Into 2D Array/README.md

+24-25
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,13 @@ original 中只有 1 个元素。
6565

6666
<!-- 这里可写通用的实现逻辑 -->
6767

68-
在该题当中,想要成功转换为二维数组,**元素不能少也不能多**,所以需要先做一次长度判断,不对等的情况下直接退出。
68+
**方法一:模拟**
6969

70-
在数量正确时,则按照给出的规格,将 `original` 分割成小数组,放入返回数组当中。
70+
根据题目描述,我们知道,要想构造出一个 $m$ 行 $n$ 列的二维数组,需要满足 $m \times n$ 等于原数组的长度。如果不满足,直接返回空数组即可。
71+
72+
如果满足,我们可以按照题目描述的过程,将原数组中的元素依次放入二维数组中即可。
73+
74+
时间复杂度 $O(m \times n)$,其中 $m$ 和 $n$ 分别为二维数组的行数和列数。忽略答案的空间消耗,空间复杂度 $O(1)$。
7175

7276
<!-- tabs:start -->
7377

@@ -110,8 +114,10 @@ class Solution {
110114
class Solution {
111115
public:
112116
vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {
113-
if (m * n != original.size()) return {};
114-
vector<vector<int>> ans(m, vector<int>(n, 0));
117+
if (m * n != original.size()) {
118+
return {};
119+
}
120+
vector<vector<int>> ans(m, vector<int>(n));
115121
for (int i = 0; i < m; ++i) {
116122
for (int j = 0; j < n; ++j) {
117123
ans[i][j] = original[i * n + j];
@@ -125,15 +131,14 @@ public:
125131
### **Go**
126132
127133
```go
128-
func construct2DArray(original []int, m int, n int) [][]int {
134+
func construct2DArray(original []int, m int, n int) (ans [][]int) {
129135
if m*n != len(original) {
130136
return [][]int{}
131137
}
132-
var ans [][]int
133138
for i := 0; i < m*n; i += n {
134139
ans = append(ans, original[i:i+n])
135140
}
136-
return ans
141+
return
137142
}
138143
```
139144

@@ -147,17 +152,14 @@ func construct2DArray(original []int, m int, n int) [][]int {
147152
* @return {number[][]}
148153
*/
149154
var construct2DArray = function (original, m, n) {
150-
const result = [];
151-
152-
if (original.length != m * n) {
153-
return result;
155+
if (m * n != original.length) {
156+
return [];
154157
}
155-
156-
for (let i = 0; i < m; i++) {
157-
result.push(original.slice(i * n, i * n + n));
158+
const ans = [];
159+
for (let i = 0; i < m * n; i += n) {
160+
ans.push(original.slice(i, i + n));
158161
}
159-
160-
return result;
162+
return ans;
161163
};
162164
```
163165

@@ -169,17 +171,14 @@ function construct2DArray(
169171
m: number,
170172
n: number,
171173
): number[][] {
172-
const result = [];
173-
174-
if (original.length != m * n) {
175-
return result;
174+
if (m * n != original.length) {
175+
return [];
176176
}
177-
178-
for (let i = 0; i < m; i++) {
179-
result.push(original.slice(i * n, i * n + n));
177+
const ans: number[][] = [];
178+
for (let i = 0; i < m * n; i += n) {
179+
ans.push(original.slice(i, i + n));
180180
}
181-
182-
return result;
181+
return ans;
183182
}
184183
```
185184

solution/2000-2099/2022.Convert 1D Array Into 2D Array/README_EN.md

+18-23
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ class Solution {
8787
class Solution {
8888
public:
8989
vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {
90-
if (m * n != original.size()) return {};
91-
vector<vector<int>> ans(m, vector<int>(n, 0));
90+
if (m * n != original.size()) {
91+
return {};
92+
}
93+
vector<vector<int>> ans(m, vector<int>(n));
9294
for (int i = 0; i < m; ++i) {
9395
for (int j = 0; j < n; ++j) {
9496
ans[i][j] = original[i * n + j];
@@ -102,15 +104,14 @@ public:
102104
### **Go**
103105
104106
```go
105-
func construct2DArray(original []int, m int, n int) [][]int {
107+
func construct2DArray(original []int, m int, n int) (ans [][]int) {
106108
if m*n != len(original) {
107109
return [][]int{}
108110
}
109-
var ans [][]int
110111
for i := 0; i < m*n; i += n {
111112
ans = append(ans, original[i:i+n])
112113
}
113-
return ans
114+
return
114115
}
115116
```
116117

@@ -124,17 +125,14 @@ func construct2DArray(original []int, m int, n int) [][]int {
124125
* @return {number[][]}
125126
*/
126127
var construct2DArray = function (original, m, n) {
127-
const result = [];
128-
129-
if (original.length != m * n) {
130-
return result;
128+
if (m * n != original.length) {
129+
return [];
131130
}
132-
133-
for (let i = 0; i < m; i++) {
134-
result.push(original.slice(i * n, i * n + n));
131+
const ans = [];
132+
for (let i = 0; i < m * n; i += n) {
133+
ans.push(original.slice(i, i + n));
135134
}
136-
137-
return result;
135+
return ans;
138136
};
139137
```
140138

@@ -146,17 +144,14 @@ function construct2DArray(
146144
m: number,
147145
n: number,
148146
): number[][] {
149-
const result = [];
150-
151-
if (original.length != m * n) {
152-
return result;
147+
if (m * n != original.length) {
148+
return [];
153149
}
154-
155-
for (let i = 0; i < m; i++) {
156-
result.push(original.slice(i * n, i * n + n));
150+
const ans: number[][] = [];
151+
for (let i = 0; i < m * n; i += n) {
152+
ans.push(original.slice(i, i + n));
157153
}
158-
159-
return result;
154+
return ans;
160155
}
161156
```
162157

solution/2000-2099/2022.Convert 1D Array Into 2D Array/Solution.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
class Solution {
22
public:
33
vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {
4-
if (m * n != original.size()) return {};
5-
vector<vector<int>> ans(m, vector<int>(n, 0));
4+
if (m * n != original.size()) {
5+
return {};
6+
}
7+
vector<vector<int>> ans(m, vector<int>(n));
68
for (int i = 0; i < m; ++i) {
79
for (int j = 0; j < n; ++j) {
810
ans[i][j] = original[i * n + j];
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
func construct2DArray(original []int, m int, n int) [][]int {
1+
func construct2DArray(original []int, m int, n int) (ans [][]int) {
22
if m*n != len(original) {
33
return [][]int{}
44
}
5-
var ans [][]int
65
for i := 0; i < m*n; i += n {
76
ans = append(ans, original[i:i+n])
87
}
9-
return ans
8+
return
109
}

solution/2000-2099/2022.Convert 1D Array Into 2D Array/Solution.js

+6-9
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,12 @@
55
* @return {number[][]}
66
*/
77
var construct2DArray = function (original, m, n) {
8-
const result = [];
9-
10-
if (original.length != m * n) {
11-
return result;
8+
if (m * n != original.length) {
9+
return [];
1210
}
13-
14-
for (let i = 0; i < m; i++) {
15-
result.push(original.slice(i * n, i * n + n));
11+
const ans = [];
12+
for (let i = 0; i < m * n; i += n) {
13+
ans.push(original.slice(i, i + n));
1614
}
17-
18-
return result;
15+
return ans;
1916
};

solution/2000-2099/2022.Convert 1D Array Into 2D Array/Solution.ts

+6-9
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@ function construct2DArray(
33
m: number,
44
n: number,
55
): number[][] {
6-
const result = [];
7-
8-
if (original.length != m * n) {
9-
return result;
6+
if (m * n != original.length) {
7+
return [];
108
}
11-
12-
for (let i = 0; i < m; i++) {
13-
result.push(original.slice(i * n, i * n + n));
9+
const ans: number[][] = [];
10+
for (let i = 0; i < m * n; i += n) {
11+
ans.push(original.slice(i, i + n));
1412
}
15-
16-
return result;
13+
return ans;
1714
}

0 commit comments

Comments
 (0)