Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
addTwoNumbers2, calculate, addStrings
  • Loading branch information
Lewis Nakao committed Nov 5, 2021
commit a315b78ff3bca3cc128968cc58613a00b10f6213
12 changes: 10 additions & 2 deletions src/assets/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,10 @@ const data = [
// url: "" },
// https://www.hackerrank.com/challenges/find-the-running-median
// https://www.hackerrank.com/challenges/swap-nodes-algo

//--------- leetcode ----------
{ num: 2, name: "Add Two Numbers", method: "addTwoNumbers2", params: 2, site: "leetcode", difficulty: "Medium", tags: ['fb'],
url: "https://leetcode.com/problems/add-two-numbers/" },
{ num: 3, name: "Length of Longest Substring", method: "lengthOfLongestSubstring", site: "leetcode",
url: "https://leetcode.com/problems/longest-substring-without-repeating-characters" },
{ num: 4, name: "Find Median Sorted Arrays", method: "findMedianSortedArrays", params: 2, site: "leetcode",
Expand All @@ -55,8 +57,12 @@ const data = [
url: "https://leetcode.com/problems/string-to-integer-atoi/submissions/" },
{ num: 43, name: "Multiply Strings", method: "multiply", params: 2, site: "leetcode", difficulty: "Medium",
url: "https://leetcode.com/problems/multiply-strings/", incomplete: true },
{ num: 140, name: "Word Break II", method: "wordBreak", params: 2, site: "leetcode",
{ num: 140, name: "Word Break II", method: "wordBreak", params: 2, site: "leetcode", difficulty: "Hard",
url: "https://leetcode.com/problems/word-break-ii/" },
{ num: 227, name: "Basic Calculator II", method: "calculate", site: "leetcode", difficulty: "Medium", tags: ['fb'],
url: "https://leetcode.com/problems/basic-calculator-ii/" },
{ num: 415, name: "Add Strings", method: "addStrings", params: 2, site: "leetcode", difficulty: "Easy",
url: "https://leetcode.com/problems/add-strings/" },
{ num: 993, name: "Number of Recent Calls", method: "numberOfRecentCalls", site: "leetcode",
url: "https://leetcode.com/problems/number-of-recent-calls/" },
{ num: 1288, name: "Remove Covered Intervals", method: "removeCoveredIntervals", site: "leetcode",
Expand All @@ -67,6 +73,8 @@ const data = [
url: "https://leetcode.com/problems/special-array-with-x-elements-greater-than-or-equal-x" },
{ num: 1609, name: "Even Odd Tree", method: "isEvenOddTree", site: "leetcode",
url: "https://leetcode.com/problems/even-odd-tree/", incomplete: true },
// { num: , name: "", method: "", site: "leetcode", difficulty: "Easy", tags: ['fb'],
// url: "" },

//--------- code.golf ----------
{ num: 1, name: "12 Days of Christmas", method: "print12DaysOfChristmas", site: "code.golf",
Expand Down
73 changes: 73 additions & 0 deletions src/leetcode/0002-addTwoNumbers2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Definition for singly-linked list.
*/
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}

const buildList = arr => {
console.log(arr);
let head, node = null;
arr.forEach(a => {
if (!node) head = node = new ListNode(a);
else {
node.next = new ListNode(a);
node = node.next;
}
});
return head;
}

/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
const addTwoNumbers2 = (l1, l2) => {
l1 = buildList(l1);
l2 = buildList(l2);

//--------------
let l1Node = l1;
let l2Node = l2;
let answer, answerNode, sum, addATen = 0, num1, num2;
while (l1Node || l2Node) {
num1 = (l1Node ? l1Node.val : 0);
num2 = (l2Node ? l2Node.val : 0);
sum = num1 + num2 + addATen;

if (sum > 9) {
sum -= 10;
addATen = 1;
}
else addATen = 0;

if (!answerNode) answer = answerNode = new ListNode(sum);
else {
answerNode.next = new ListNode(sum);
answerNode = answerNode.next;
}

//next nodes
if (l1Node) l1Node = l1Node.next;
if (l2Node) l2Node = l2Node.next;
}
if (addATen) answerNode.next = new ListNode(addATen);

//return answer;
//--------------

let testAnswer = [];
answerNode = answer;
while (answerNode) {
testAnswer.push(answerNode.val);
answerNode = answerNode.next;
}
return testAnswer;
};

const addTwoNumbers2Tests = [
[[[2,4,3], [5,6,4]], [7, 0, 8]],
[[[9,9,9,9,9,9,9], [9,9,9,9]], [8,9,9,9,0,0,0,1]]
];
59 changes: 59 additions & 0 deletions src/leetcode/0227-calculate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
const OPERATORS = "/*+-";

const solve = (opIndex, eqArr) => {
let solution;
let operator = eqArr[opIndex];
let num1 = eqArr[opIndex - 1];
let num2 = eqArr[opIndex + 1];
switch (operator) {
case "/": solution = num1 / num2; break;
case "*": solution = num1 * num2; break;
case "-": solution = num1 - num2; break;
default:
case "+": solution = num1 + num2; break;
}
eqArr.splice(opIndex - 1, 3, Math.floor(solution));
// console.log("opIndex=", opIndex, " | ", num1, operator, num2, "=", solution, eqArr);
}

const calculate = s => {
const eqArr = [];
s = s.replace(/\s+/, "");
let item = "", c;
for (let i = 0; i < s.length; i++) {
c = s.charAt(i);
if (OPERATORS.includes(c)) {
eqArr.push(c);
}
else {
item += c;
if (i === s.length - 1 || (i < s.length - 1 && OPERATORS.includes(s.charAt(i + 1)))) {
eqArr.push(parseInt(item));
item = "";
}
}
}
for (let i = 1; i < eqArr.length - 1; i++) {
if ("*/".includes(eqArr[i])) {
solve(i, eqArr);
i--;
}
}
for (i = 1; i < eqArr.length - 1; i++) {
if ("+-".includes(eqArr[i])) {
solve(i, eqArr);
i--;
}
}
// console.log("END", eqArr);
return eqArr[0];
};

const calculateTests = [
["3+2*2", 7],
[" 3/2 ", 1],
[" 3+5 / 2 ", 5],
[" 33 + 50 / 2 ", 58],
["1-1+1", 1],
["2*3*4", 24]
];
34 changes: 34 additions & 0 deletions src/leetcode/0415-addStrings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@

/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
const addStrings = (num1, num2) => {
const maxLen = Math.max(num1.length, num2.length);
const numReversed1 = num1.split("").reverse();
const numReversed2 = num2.split("").reverse();
let sum, answer = [], moreThanTen = 0;
for (let i = 0; i < maxLen; i++) {
sum = (numReversed1[i] ? parseInt(numReversed1[i]) : 0)
+ (numReversed2[i] ? parseInt(numReversed2[i]) : 0)
+ moreThanTen;
if (i < maxLen - 1) {
if (sum > 9) {
sum -= 10
moreThanTen = 1;
}
else moreThanTen = 0;
}
answer.push("" + sum);
}
return answer.reverse().join("");
};

const addStringsTests = [
[["11", "123"], "134"],
[["456", "77"], "533"],
[["0", "0"], "0"],
[["1", "9"], "10"],
[["9333852702227987", "85731737104263"], "9419584439332250"],
];