Skip to content

Commit fbbb30b

Browse files
authored
feat: add solutions to lc problems: No.2191,2194 (doocs#2791)
* No.2191.Sort the Jumbled Numbers * No.2194.Cells in a Range on an Excel Sheet
1 parent 8c8241f commit fbbb30b

File tree

14 files changed

+474
-168
lines changed

14 files changed

+474
-168
lines changed

solution/2100-2199/2191.Sort the Jumbled Numbers/README.md

+138-50
Original file line numberDiff line numberDiff line change
@@ -72,33 +72,31 @@
7272
```python
7373
class Solution:
7474
def sortJumbled(self, mapping: List[int], nums: List[int]) -> List[int]:
75-
arr = []
76-
for i, x in enumerate(nums):
77-
y = mapping[0] if x == 0 else 0
78-
k = 1
75+
def f(x: int) -> int:
76+
if x == 0:
77+
return mapping[0]
78+
y, k = 0, 1
7979
while x:
8080
x, v = divmod(x, 10)
81-
y = mapping[v] * k + y
81+
v = mapping[v]
82+
y = k * v + y
8283
k *= 10
83-
arr.append((y, i))
84-
arr.sort()
84+
return y
85+
86+
arr = sorted((f(x), i) for i, x in enumerate(nums))
8587
return [nums[i] for _, i in arr]
8688
```
8789

8890
```java
8991
class Solution {
92+
private int[] mapping;
93+
9094
public int[] sortJumbled(int[] mapping, int[] nums) {
95+
this.mapping = mapping;
9196
int n = nums.length;
92-
int[][] arr = new int[n][2];
97+
int[][] arr = new int[n][0];
9398
for (int i = 0; i < n; ++i) {
94-
int x = nums[i];
95-
int y = x == 0 ? mapping[0] : 0;
96-
int k = 1;
97-
for (; x > 0; x /= 10) {
98-
y += k * mapping[x % 10];
99-
k *= 10;
100-
}
101-
arr[i] = new int[] {y, i};
99+
arr[i] = new int[] {f(nums[i]), i};
102100
}
103101
Arrays.sort(arr, (a, b) -> a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]);
104102
int[] ans = new int[n];
@@ -107,28 +105,46 @@ class Solution {
107105
}
108106
return ans;
109107
}
108+
109+
private int f(int x) {
110+
if (x == 0) {
111+
return mapping[0];
112+
}
113+
int y = 0;
114+
for (int k = 1; x > 0; x /= 10) {
115+
int v = mapping[x % 10];
116+
y = k * v + y;
117+
k *= 10;
118+
}
119+
return y;
120+
}
110121
}
111122
```
112123

113124
```cpp
114125
class Solution {
115126
public:
116127
vector<int> sortJumbled(vector<int>& mapping, vector<int>& nums) {
117-
int n = nums.size();
118-
vector<pair<int, int>> arr(n);
119-
for (int i = 0; i < n; ++i) {
120-
int x = nums[i];
121-
int y = x == 0 ? mapping[0] : 0;
122-
int k = 1;
123-
for (; x; x /= 10) {
124-
y += k * mapping[x % 10];
128+
auto f = [&](int x) {
129+
if (x == 0) {
130+
return mapping[0];
131+
}
132+
int y = 0;
133+
for (int k = 1; x; x /= 10) {
134+
int v = mapping[x % 10];
135+
y = k * v + y;
125136
k *= 10;
126137
}
127-
arr[i] = {y, i};
138+
return y;
139+
};
140+
const int n = nums.size();
141+
vector<pair<int, int>> arr;
142+
for (int i = 0; i < n; ++i) {
143+
arr.emplace_back(f(nums[i]), i);
128144
}
129145
sort(arr.begin(), arr.end());
130146
vector<int> ans;
131-
for (auto& [_, i] : arr) {
147+
for (const auto& [_, i] : arr) {
132148
ans.push_back(nums[i]);
133149
}
134150
return ans;
@@ -139,25 +155,24 @@ public:
139155
```go
140156
func sortJumbled(mapping []int, nums []int) (ans []int) {
141157
n := len(nums)
142-
arr := make([][2]int, n)
143-
for i, x := range nums {
144-
y := 0
158+
f := func(x int) (y int) {
145159
if x == 0 {
146-
y = mapping[0]
160+
return mapping[0]
147161
}
148-
k := 1
149-
for ; x > 0; x /= 10 {
150-
y += k * mapping[x%10]
162+
for k := 1; x > 0; x /= 10 {
163+
v := mapping[x%10]
164+
y = k*v + y
151165
k *= 10
152166
}
153-
arr[i] = [2]int{y, i}
167+
return
168+
}
169+
arr := make([][2]int, n)
170+
for i, x := range nums {
171+
arr[i] = [2]int{f(x), i}
154172
}
155-
sort.Slice(arr, func(i, j int) bool {
156-
a, b := arr[i], arr[j]
157-
return a[0] < b[0] || a[0] == b[0] && a[1] < b[1]
158-
})
159-
for _, x := range arr {
160-
ans = append(ans, nums[x[1]])
173+
sort.Slice(arr, func(i, j int) bool { return arr[i][0] < arr[j][0] || arr[i][0] == arr[j][0] && arr[i][1] < arr[j][1] })
174+
for _, p := range arr {
175+
ans = append(ans, nums[p[1]])
161176
}
162177
return
163178
}
@@ -166,18 +181,91 @@ func sortJumbled(mapping []int, nums []int) (ans []int) {
166181
```ts
167182
function sortJumbled(mapping: number[], nums: number[]): number[] {
168183
const n = nums.length;
169-
const arr: number[][] = [];
170-
for (let i = 0; i < n; ++i) {
171-
let x = nums[i];
172-
let y = x === 0 ? mapping[0] : 0;
173-
let k = 1;
174-
for (; x > 0; x = Math.floor(x / 10), k *= 10) {
175-
y += mapping[x % 10] * k;
184+
const f = (x: number): number => {
185+
if (x === 0) {
186+
return mapping[0];
176187
}
177-
arr.push([y, i]);
178-
}
188+
let y = 0;
189+
for (let k = 1; x; x = (x / 10) | 0) {
190+
const v = mapping[x % 10];
191+
y += v * k;
192+
k *= 10;
193+
}
194+
return y;
195+
};
196+
const arr: number[][] = nums.map((x, i) => [f(x), i]);
179197
arr.sort((a, b) => (a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]));
180-
return arr.map(a => nums[a[1]]);
198+
return arr.map(x => nums[x[1]]);
199+
}
200+
```
201+
202+
```rust
203+
impl Solution {
204+
pub fn sort_jumbled(mapping: Vec<i32>, nums: Vec<i32>) -> Vec<i32> {
205+
let f = |x: i32| -> i32 {
206+
if x == 0 {
207+
return mapping[0];
208+
}
209+
let mut y = 0;
210+
let mut k = 1;
211+
let mut num = x;
212+
while num != 0 {
213+
let v = mapping[(num % 10) as usize];
214+
y = k * v + y;
215+
k *= 10;
216+
num /= 10;
217+
}
218+
y
219+
};
220+
221+
let n = nums.len();
222+
let mut arr: Vec<(i32, usize)> = Vec::with_capacity(n);
223+
for i in 0..n {
224+
arr.push((f(nums[i]), i));
225+
}
226+
arr.sort();
227+
228+
let mut ans: Vec<i32> = Vec::with_capacity(n);
229+
for (_, i) in arr {
230+
ans.push(nums[i]);
231+
}
232+
ans
233+
}
234+
}
235+
```
236+
237+
```cs
238+
public class Solution {
239+
public int[] SortJumbled(int[] mapping, int[] nums) {
240+
Func<int, int> f = (int x) => {
241+
if (x == 0) {
242+
return mapping[0];
243+
}
244+
int y = 0;
245+
int k = 1;
246+
int num = x;
247+
while (num != 0) {
248+
int v = mapping[num % 10];
249+
y = k * v + y;
250+
k *= 10;
251+
num /= 10;
252+
}
253+
return y;
254+
};
255+
256+
int n = nums.Length;
257+
List<(int, int)> arr = new List<(int, int)>();
258+
for (int i = 0; i < n; ++i) {
259+
arr.Add((f(nums[i]), i));
260+
}
261+
arr.Sort();
262+
263+
int[] ans = new int[n];
264+
for (int i = 0; i < n; ++i) {
265+
ans[i] = nums[arr[i].Item2];
266+
}
267+
return ans;
268+
}
181269
}
182270
```
183271

0 commit comments

Comments
 (0)