Skip to content

Commit 9967f2a

Browse files
authored
Add a bunch of solutions for LeetCode problem 2626. Array Reduce Transformation (#406)
1 parent 5ffcb26 commit 9967f2a

File tree

1 file changed

+166
-0
lines changed
  • workspaces/javascript-leetcode-month/problems/2626-array-reduce-transformation

1 file changed

+166
-0
lines changed

workspaces/javascript-leetcode-month/problems/2626-array-reduce-transformation/solution.md

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,172 @@
1111

1212
## Solutions
1313

14+
### Using `Array.prototype.reduce`
15+
16+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378766665/)
17+
18+
```javascript []
19+
/**
20+
* @param {number[]} arr
21+
* @param {Function} fn
22+
* @param {number} init
23+
* @return {number}
24+
*/
25+
const reduce = (arr, fn, init) => arr.reduce(fn, init);
26+
```
27+
28+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378765352/)
29+
30+
```typescript []
31+
const reduce = <TElement, TResult>(
32+
arr: readonly TElement[],
33+
fn: (accumulator: TResult, element: TElement) => TResult,
34+
init: TResult,
35+
): TResult => arr.reduce(fn, init);
36+
```
37+
38+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378767802/)
39+
40+
```javascript []
41+
/**
42+
* @param {number[]} arr
43+
* @param {Function} fn
44+
* @param {number} init
45+
* @return {number}
46+
*/
47+
const reduce = Function.prototype.call.bind(Array.prototype.reduce);
48+
```
49+
50+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378777231/)
51+
52+
```typescript []
53+
const reduce = <TElement, TResult>(
54+
arr: readonly TElement[],
55+
fn: (accumulator: TResult, element: TElement) => TResult,
56+
init: TResult,
57+
): TResult => [...arr].reverse().reduceRight(fn, init);
58+
```
59+
60+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378778477/)
61+
62+
```typescript []
63+
declare global {
64+
interface Array<T> {
65+
toReversed(this: T[]): T[];
66+
}
67+
68+
interface ReadonlyArray<T> {
69+
toReversed(this: readonly T[]): T[];
70+
}
71+
}
72+
73+
const reduce = <TElement, TResult>(
74+
arr: readonly TElement[],
75+
fn: (accumulator: TResult, element: TElement) => TResult,
76+
init: TResult,
77+
): TResult => arr.toReversed().reduceRight(fn, init);
78+
```
79+
80+
### Iterative
81+
82+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378776182/)
83+
84+
```typescript []
85+
function reduce<TElement, TResult>(
86+
arr: readonly TElement[],
87+
fn: (accumulator: TResult, element: TElement) => TResult,
88+
init: TResult,
89+
): TResult {
90+
let res = init;
91+
92+
for (const element of arr) {
93+
res = fn(res, element);
94+
}
95+
96+
return res;
97+
}
98+
```
99+
100+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378776438/)
101+
102+
```typescript []
103+
function reduce<TElement, TResult>(
104+
arr: readonly TElement[],
105+
fn: (accumulator: TResult, element: TElement) => TResult,
106+
init: TResult,
107+
): TResult {
108+
let res = init;
109+
110+
arr.forEach((element) => {
111+
res = fn(res, element);
112+
});
113+
114+
return res;
115+
}
116+
```
117+
118+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378781727/)
119+
120+
```typescript []
121+
function reduce<TElement, TResult>(
122+
arr: TElement[],
123+
fn: (accumulator: TResult, element: TElement) => TResult,
124+
init: TResult,
125+
): TResult {
126+
let res = init;
127+
128+
arr.reverse();
129+
while (arr.length > 0) {
130+
res = fn(res, arr.pop());
131+
}
132+
133+
return res;
134+
}
135+
```
136+
137+
### Recursive
138+
139+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378782688/)
140+
141+
```typescript []
142+
const reduce = <TElement, TResult>(
143+
arr: TElement[],
144+
fn: (accumulator: TResult, element: TElement) => TResult,
145+
init: TResult,
146+
): TResult =>
147+
arr.length === 0 ? init : reduce(arr, fn, fn(init, arr.shift()));
148+
```
149+
150+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378769940/)
151+
152+
```typescript []
153+
const reduce = <TElement, TResult>(
154+
arr: readonly TElement[],
155+
fn: (accumulator: TResult, element: TElement) => TResult,
156+
init: TResult,
157+
index: number = 0,
158+
): TResult =>
159+
index === arr.length
160+
? init
161+
: reduce(arr, fn, fn(init, arr[index]), index + 1);
162+
```
163+
164+
[View Submission on LeetCode](https://leetcode.com/problems/array-reduce-transformation/submissions/1378772700/)
165+
166+
```typescript []
167+
function reduce<TElement, TResult>(
168+
arr: readonly TElement[],
169+
fn: (accumulator: TResult, element: TElement) => TResult,
170+
init: TResult,
171+
): TResult {
172+
const doReduce = (accumulator: TResult, index: number) =>
173+
index === arr.length
174+
? accumulator
175+
: doReduce(fn(accumulator, arr[index]), index + 1);
176+
return doReduce(init, 0);
177+
}
178+
```
179+
14180
## Answers to Bonus Questions
15181

16182
> [!TIP]

0 commit comments

Comments
 (0)