Skip to content

Commit d416099

Browse files
committed
add more solution
1 parent be97ede commit d416099

16 files changed

+617
-2
lines changed

001_two_sum.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
const nums = [2, 7, 11, 15];
2-
const target = 9;
1+
const nums = [1, 10, 25, 34, 60];
2+
const target = 18;
33

44
const twoSum = function (nums, target) {
55
let result = {};

002_add_two_nums.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val) {
4+
* this.val = val;
5+
* this.next = null;
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode} l1
10+
* @param {ListNode} l2
11+
* @return {ListNode}
12+
*/
13+
const addTwoNumbers = function(l1, l2) {
14+
let l3 = new ListNode(0); // Default list val = 0, next = null
15+
let sum = 0;
16+
let p3 = l3;
17+
while (l1 || l2) {
18+
/**
19+
* If sum > 10, need to get 1 because previous sum maybe 5 + 5 or 5+6
20+
* @type {number}
21+
*/
22+
sum = Math.floor(sum /10);
23+
if (l1) {
24+
sum +=l1.val;
25+
l1 = l1.next;
26+
}
27+
28+
if (l2) {
29+
sum +=l2.val;
30+
l2 = l2.next;
31+
}
32+
33+
l3.next = new ListNode(sum%10);
34+
l3 = l3.next;
35+
}
36+
37+
if (Math.floor(sum/10) === 1) {
38+
l3.next = new ListNode(1);
39+
}
40+
41+
return p3.next;
42+
};
43+
44+
function ListNode(val) {
45+
this.val = val;
46+
this.next = null;
47+
}

003_longest_substring.js

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
const lengthOfLongestSubstring = function(s) {
6+
const visitedChars = {};
7+
let len = 0;
8+
let index = 0;
9+
for (let i =0 ; i<s.length; i++) {
10+
if (s[i] in visitedChars) {
11+
len = Math.max(len, i-index);
12+
index = Math.max(index, visitedChars[s[i]]+1);
13+
}
14+
visitedChars[s[i]] = i;
15+
}
16+
17+
return Math.max(len, s.length - index);
18+
};

005_longest_palindromic_substring.js

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/**
2+
* @param {string} s
3+
* @return {string}
4+
*/
5+
6+
const longestPalindrome1 = function(s) {
7+
function isPalindromic(subStr) {
8+
return (subStr === subStr.split('').reverse().join(''));
9+
}
10+
11+
let maxStr = s[0];
12+
let maxLen = 0;
13+
for (let i = 0; i<s.length; i++) {
14+
const next = s.substring(i+1).lastIndexOf(s[i]);
15+
if (next !== -1) {
16+
const len = i + next +2;
17+
const subStr = s.substring(i, len);
18+
if (isPalindromic(subStr)) {
19+
const len = subStr.length;
20+
if (len > maxLen) {
21+
maxStr = subStr;
22+
maxLen = len;
23+
}
24+
}
25+
}
26+
}
27+
28+
return s ? maxStr : '';
29+
};
30+
31+
const longestPalindrome = function(s) {
32+
if (s.length <= 1) {
33+
return s;
34+
}
35+
36+
const str = '#' + s.split('').join('#') + '#';
37+
let max = 1;
38+
let left = 0;
39+
let right = 1;
40+
let subStr = '';
41+
for (let i = 0; i<str.length;i++) {
42+
left = i-1;
43+
right = i+1;
44+
let sub = str[i];
45+
while (left >= 0 && right < str.length){
46+
if (str[left] === str[right]) {
47+
sub = (str[left] + sub + str[right]);
48+
left --;
49+
right ++;
50+
} else {
51+
break;
52+
}
53+
}
54+
55+
const newLen = sub.replace('#', '').length;
56+
57+
if (newLen > max) {
58+
subStr = sub;
59+
max = newLen;
60+
}
61+
}
62+
63+
return subStr.replace(/#/g, '');
64+
};
65+
66+
67+
var longestPalindrome3 = function(s) {
68+
let oddStarts = [] // length of 3
69+
let evenStarts = [] // length of 2
70+
for (let i =0; i<s.length-1; i++){
71+
if (s[i]==s[i+1]){
72+
evenStarts.push([i,i+1])
73+
}
74+
if (s[i+2]!==undefined && s[i]==s[i+2]){
75+
oddStarts.push([i,i+2])
76+
}
77+
}
78+
let allStarts = oddStarts.concat(evenStarts)
79+
let max = 1
80+
let maxindex = [0,1]
81+
let left;
82+
let right;
83+
for (let allstarts of allStarts){
84+
85+
left=allstarts[0]
86+
right = allstarts[1]
87+
left--
88+
right++
89+
90+
while (left>=0 && right<= s.length-1){
91+
92+
if(s[left]===s[right]){
93+
left--
94+
right++
95+
}
96+
else {
97+
break
98+
}
99+
}
100+
if (right-left-1>max){
101+
max = right-left-2
102+
maxindex = [left+1,right]
103+
}
104+
}
105+
return s.slice(maxindex[0],maxindex[1])
106+
}
107+
108+
109+
const str = 'cbbd';
110+
111+
console.log(longestPalindrome3(str));

006_zigzag_converstion.js

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* @param {string} s
3+
* @param {number} numRows
4+
* @return {string}
5+
*/
6+
7+
8+
// const convert = function(s, numRows) {
9+
// const sArr = s.split('');
10+
// let cols = {};
11+
// let col = 1;
12+
// let index = numRows-2;
13+
// while (sArr.length !== 0) {
14+
//
15+
// if (col === 1 || col%(numRows-1) === 1) {
16+
// if (col !==1) {
17+
// index = numRows -2;
18+
// }
19+
// if (sArr.length <= numRows) {
20+
// cols[col] = sArr.splice(0, sArr.length);
21+
// for (let j=cols[col].length; j<numRows; j++) {
22+
// console.log(j);
23+
// cols[col][j] = ' ';
24+
// }
25+
// console.log(cols[col]);
26+
// } else {
27+
// if (numRows<=2) {
28+
// cols[col] = sArr.splice(0, 1);
29+
// } else {
30+
// cols[col] = sArr.splice(0, numRows);
31+
// }
32+
// }
33+
// } else {
34+
// cols[col] = new Array(numRows).fill(' ');
35+
// cols[col][index] = sArr.splice(0, 1)[0];
36+
// index--;
37+
// }
38+
//
39+
// col ++;
40+
//
41+
// }
42+
// let result = '';
43+
// for (let i = 0; i< numRows; i++) {
44+
// Object.keys(cols).forEach(function(key) {
45+
// console.log(cols[key]);
46+
// if (cols[key][i] !== ' ') {
47+
// result +=cols[key][i];
48+
// }
49+
// });
50+
// }
51+
// return numRows === 1 ? s : result;
52+
// };
53+
54+
const convert = function (s, numRows) {
55+
if(s.length < numRows || numRows < 2 || s.length < 2) {
56+
return s;
57+
}
58+
let returnS = '';
59+
// Loop over rows
60+
for (let j = 0; j < numRows; j++) {
61+
for (let i = j; i < s.length; i += 2 * (numRows - 1)) {
62+
returnS += s[i];
63+
console.log(s[i]);
64+
if (j !== 0 && j < numRows - 1) {
65+
/**
66+
* Not first row and last row
67+
* @type {number}
68+
*/
69+
const intermediateIndex = i + 2 * (numRows - j - 1);
70+
if (s[intermediateIndex]) {
71+
console.log(s[intermediateIndex]);
72+
returnS += s[intermediateIndex];
73+
}
74+
}
75+
}
76+
}
77+
return returnS;
78+
};
79+
80+
const a = 'PAYPALISHIRING';
81+
82+
console.log(convert(a, 4));
83+
84+

022_generate_parenthess.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const generateParenthesis = function(n) {
2+
let res = [] ;
3+
let temRes = '';
4+
let left = 0;
5+
let right = 0;
6+
let level = n;
7+
helper(temRes, left, right, level, res);
8+
return res
9+
};
10+
11+
function helper(temRes, left, right, level, res) {
12+
if (left > level || right > left)
13+
return;
14+
if (left === right && level * 2 === temRes.length) {
15+
console.log(temRes + ' | left ' + left + ' | ' + right);
16+
res.push( temRes );
17+
return;
18+
}
19+
20+
helper(temRes + '(', left + 1, right, level, res);
21+
helper(temRes + ')', left, right + 1, level, res);
22+
}
23+
24+
console.log(generateParenthesis(3));

097_interleaving_string.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* @param {string} s1
3+
* @param {string} s2
4+
* @param {string} s3
5+
* @return {boolean}
6+
*/
7+
const isInterleave = function (s1, s2, s3) {
8+
const len1 = s1.length
9+
const len2 = s2.length
10+
const len3 = s3.length
11+
if (len1 + len2 !== len3) {
12+
return false
13+
}
14+
if (len1 <= 0) {
15+
return s2 === s3
16+
}
17+
if (len2 <= 0) {
18+
return s1 === s3
19+
}
20+
21+
const dp = []
22+
for (let i = 0; i <= len1; i++) {
23+
for (let j = 0; j <= len2; j++) {
24+
dp[j] = (i <= 0 || dp[j]) && s1[i - 1] === s3[i + j - 1] ||
25+
(j <= 0 || dp[j - 1]) && s2[j - 1] === s3[i + j - 1];
26+
27+
console.log(dp);
28+
}
29+
}
30+
return dp[len2]
31+
};
32+
33+
34+
const s1 = 'aabcc';
35+
const s2 = 'dbbca';
36+
const s3 = 'aadbbcbcac';
37+
38+
console.log(isInterleave(s1, s2, s3));

121_best_time_buy_stock.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* @param {number[]} prices
3+
* @return {number}
4+
*/
5+
const maxProfit = function(prices) {
6+
let max = 0;
7+
for (let i = 0; i<prices.length;i++) {
8+
let temp = prices;
9+
temp = temp.slice(i+1);
10+
const next = Math.max(...temp);
11+
if (next > prices[i]) {
12+
max = Math.max(max, next - prices[i]);
13+
}
14+
}
15+
16+
return max;
17+
};
18+
19+
const maxProfit2 = function(prices) {
20+
let max = 0;
21+
let minPrice = prices[0];
22+
23+
for (let i = 1; i<prices.length;i++) {
24+
max = Math.max(max, prices[i] - minPrice);
25+
minPrice = Math.min(minPrice, prices[i])
26+
}
27+
28+
return max;
29+
};
30+
31+
const prices = [7,1,5,3,6,4];
32+
33+
console.log(maxProfit(prices));

122_best_time_buy_stock_2.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param {number[]} prices
3+
* @return {number}
4+
*/
5+
const maxProfit = function(prices) {
6+
var len = prices.length;
7+
if(len <= 1) return 0;
8+
var ret = 0;
9+
for(var i = 1; i < len; i++) {
10+
ret += Math.max(0, prices[i] - prices[i-1]);
11+
}
12+
return ret;
13+
};
14+
15+
16+
17+
const prices = [1, 2, 3, 4, 2];
18+
19+
console.log(maxProfit2(prices));

0 commit comments

Comments
 (0)