Skip to content

Commit 3480ef9

Browse files
committed
some random challenges
1 parent d80a5f9 commit 3480ef9

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

random/add-two-numbers.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
class ListNode {
2+
constructor(val = 0, next = null) {
3+
this.val = val;
4+
this.next = next;
5+
}
6+
}
7+
8+
/**
9+
* @param {ListNode} l1
10+
* @param {ListNode} l2
11+
* @return {ListNode}
12+
*/
13+
const addTwoNumbers = (l1, l2) => {
14+
if (!l1 && !l2) return 0;
15+
if (!l1) return l2;
16+
if (!l2) return l1;
17+
18+
let addFromPrev = l1.val + l2.val > 9,
19+
head = new ListNode((l1.val + l2.val) % 10),
20+
curr = head;
21+
(l1 = l1.next), (l2 = l2.next);
22+
while (l1 && l2) {
23+
let sum = l1.val + l2.val;
24+
if (addFromPrev) sum++, (addFromPrev = false);
25+
if (sum > 9) (sum = sum % 10), (addFromPrev = true);
26+
(l1 = l1.next), (l2 = l2.next), (curr.next = new ListNode(sum)), (curr = curr.next);
27+
}
28+
while (l1) {
29+
let sum = l1.val;
30+
if (addFromPrev) sum++, (addFromPrev = false);
31+
if (sum > 9) (sum = sum % 10), (addFromPrev = true);
32+
(l1 = l1.next), (curr.next = new ListNode(sum)), (curr = curr.next);
33+
}
34+
while (l2) {
35+
let sum = l2.val;
36+
if (addFromPrev) sum++, (addFromPrev = false);
37+
if (sum > 9) (sum = sum % 10), (addFromPrev = true);
38+
(l2 = l2.next), (curr.next = new ListNode(sum)), (curr = curr.next);
39+
}
40+
if (addFromPrev) curr.next = new ListNode(1);
41+
return head;
42+
};
43+
44+
const printList = (head) => {
45+
let str = '';
46+
while (head) (str += head.val + ' -> '), (head = head.next);
47+
console.log(str);
48+
};
49+
50+
let l1 = new ListNode(2, new ListNode(4, new ListNode(3))),
51+
l2 = new ListNode(5, new ListNode(6, new ListNode(4)));
52+
53+
printList(addTwoNumbers(l1, l2)); // 7 -> 0 -> 8
54+
55+
l1 = new ListNode(0);
56+
l2 = new ListNode(0);
57+
58+
printList(addTwoNumbers(l1, l2)); // 0
59+
60+
l1 = new ListNode(
61+
9,
62+
new ListNode(
63+
9,
64+
new ListNode(
65+
9,
66+
new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9))))
67+
)
68+
)
69+
);
70+
l2 = new ListNode(9, new ListNode(9, new ListNode(9, new ListNode(9))));
71+
printList(addTwoNumbers(l1, l2)); // 8 -> 9 -> 9 -> 9 -> 0 -> 0 -> 0 -> 1

random/first-missing-positive.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
const firstMissingPositive = (nums) => {
6+
let min = Infinity,
7+
idx = 0;
8+
for (let i = 1; i < nums.length; i++) {
9+
if (nums[i - 1] === nums[i]) continue;
10+
const requiredInt = nums[i - 1] + 1;
11+
if (nums[i] !== requiredInt) {
12+
min = Math.min(min, requiredInt);
13+
}
14+
}
15+
return min;
16+
};
17+
18+
console.log(firstMissingPositive([1, 2, 0])); // 3
19+
console.log(firstMissingPositive([3, 4, -1, 1])); // 2
20+
console.log(firstMissingPositive([7, 8, 9, 11, 12])); // 1

random/reverse-integer.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @param {number} x
3+
* @return {number}
4+
*/
5+
const reverse = (x) => {
6+
if (x === 0) return x;
7+
const negative = x < 0;
8+
x = Math.abs(x);
9+
let sum = 0;
10+
while (x > 0) (sum += x % 10), (x = Math.floor(x / 10)), x > 0 && (sum *= 10);
11+
return 2 ** 31 - 1 < sum || sum < -(2 ** 31) ? 0 : negative ? -sum : sum;
12+
};
13+
14+
console.log(reverse(123));
15+
console.log(reverse(-123));

0 commit comments

Comments
 (0)