Skip to content

Commit d966f0c

Browse files
committed
add new scripts.
1 parent f5773a7 commit d966f0c

9 files changed

+225
-0
lines changed

28-implement-strStr().js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param {string} haystack
3+
* @param {string} needle
4+
* @return {number}
5+
*/
6+
const strStr = function(haystack, needle) {
7+
if (needle === "") return 0;
8+
for (let i = 0; ; i++) {
9+
for (let j = 0; ; j++) {
10+
if (j === needle.length) {
11+
return i;
12+
}
13+
if (i + j === haystack.length) return -1;
14+
if (haystack.charAt(i + j) !== needle.charAt(j)) {
15+
break;
16+
}
17+
}
18+
}
19+
};

29-divide-two-integers.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* @param {number} dividend
3+
* @param {number} divisor
4+
* @return {number}
5+
*/
6+
const divide = function(dividend, divisor) {
7+
if (!divisor || (dividend === Number.MIN_SAFE_INTEGER && divisor === -1)) {
8+
return Number.MAX_SAFE_INTEGER;
9+
}
10+
const MAX_INT = Math.pow(2, 31) - 1;
11+
if (dividend === -2147483648 && divisor === -1) return MAX_INT;
12+
13+
const sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
14+
let dvd = Math.abs(dividend);
15+
let dvs = Math.abs(divisor);
16+
let res = 0;
17+
18+
while (dvd >= dvs) {
19+
let tmp = dvs;
20+
let multiple = 1;
21+
while (dvd >= tmp << 1 && tmp << 1 > 0) {
22+
tmp <<= 1;
23+
multiple <<= 1;
24+
}
25+
dvd -= tmp;
26+
res += multiple;
27+
}
28+
return sign === 1 ? res : -res;
29+
};

35-search-insert-position.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
const searchInsert = function(nums, target) {
7+
for (let i = 0; i < nums.length; i++) {
8+
if (nums[i] >= target) {
9+
return i;
10+
} else {
11+
if (i === nums.length - 1) {
12+
return i + 1;
13+
}
14+
}
15+
}
16+
};

46-permutations.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
function permute(nums) {
6+
const list = [];
7+
// Arrays.sort(nums); // not necessary
8+
backtrack(list, [], nums);
9+
return list;
10+
}
11+
12+
function backtrack(list, tempList, nums) {
13+
if (tempList.length == nums.length) {
14+
list.push(tempList.slice(0));
15+
} else {
16+
for (let i = 0; i < nums.length; i++) {
17+
if (tempList.includes(nums[i])) continue; // element already exists, skip
18+
tempList.push(nums[i]);
19+
backtrack(list, tempList, nums);
20+
tempList.pop();
21+
}
22+
}
23+
}

52-n-queens-II.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
const totalNQueens = function(n) {
6+
//Keeps track of the # of valid solutions
7+
let count = 0;
8+
9+
//Helps identify valid solutions
10+
const done = Math.pow(2, n) - 1;
11+
12+
//Checks all possible board configurations
13+
const innerRecurse = function(ld, col, rd) {
14+
//All columns are occupied,
15+
//so the solution must be complete
16+
if (col === done) {
17+
count++;
18+
return;
19+
}
20+
21+
//Gets a bit sequence with "1"s
22+
//whereever there is an open "slot"
23+
let poss = ~(ld | rd | col);
24+
25+
//Loops as long as there is a valid
26+
//place to put another queen.
27+
while (poss & done) {
28+
let bit = poss & -poss;
29+
poss -= bit;
30+
innerRecurse((ld | bit) >> 1, col | bit, (rd | bit) << 1);
31+
}
32+
};
33+
34+
innerRecurse(0, 0, 0);
35+
36+
return count;
37+
};

53-maximum-subarray.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
const maxSubArray = function(nums) {
6+
let preSum = nums[0];
7+
let maxSum = preSum;
8+
for (let i = 1; i < nums.length; i++) {
9+
preSum = preSum > 0 ? preSum + nums[i] : nums[i];
10+
maxSum = Math.max(preSum, maxSum);
11+
}
12+
return maxSum;
13+
};

65-valid-number.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @param {string} str
3+
* @returns {boolean}
4+
*/
5+
const isNumber = function(str) {
6+
let i = 0;
7+
let s = str;
8+
// 跳过前导空格
9+
for (; i < s.length && " " == s[i]; ++i);
10+
// 处理正负号
11+
if ("+" == s[i] || "-" == s[i]) ++i;
12+
// 处理后面数字部分
13+
let digit = false,
14+
dot = false,
15+
exp = false;
16+
for (; i < s.length; ++i) {
17+
if ("." == s[i] && !dot)
18+
// '.'不能出现2次,'.'前面可以没有数字
19+
dot = true;
20+
else if ("e" == s[i] && !exp && digit) {
21+
// 'e'不能出现2次,'e'前面必须有数字
22+
// 'e'后面不能出现'.','e'后面必须是整数(可以是正的或负的)
23+
dot = exp = true;
24+
if (i + 1 < s.length && ("+" == s[i + 1] || "-" == s[i + 1])) ++i;
25+
if (i + 1 >= s.length || !(s[i + 1] >= "0" && s[i + 1] <= "9"))
26+
return false;
27+
} else if (s[i] >= "0" && s[i] <= "9") digit = true;
28+
else break;
29+
}
30+
31+
// 跳过后面空格
32+
for (; i < s.length && " " == s[i]; ++i);
33+
34+
return digit && i == s.length;
35+
};

68-text-justification.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @param {string[]} words
3+
* @param {number} L
4+
* @returns {string[]}
5+
*/
6+
const fullJustify = function(words, L) {
7+
const res = [""];
8+
if (words.length === 0 || L === 0) {
9+
return res;
10+
} else {
11+
res.shift();
12+
for (let i = 0, k, l; i < words.length; i += k) {
13+
for (
14+
k = l = 0;
15+
i + k < words.length && l + words[i + k].length <= L - k;
16+
k++
17+
) {
18+
l += words[i + k].length;
19+
}
20+
let tmp = words[i];
21+
for (j = 0; j < k - 1; j++) {
22+
if (i + k >= words.length) {
23+
tmp += " ";
24+
} else {
25+
// for (i = 0; i < ((L - l) / (k - 1) + (j < (L - l) % (k - 1))) - 1; i++) {
26+
// tmp += ' ';
27+
// }
28+
tmp += Array(
29+
parseInt((L - l) / (k - 1) + (j < (L - l) % (k - 1))) + 1
30+
).join(" ");
31+
}
32+
// tmp += (L - l) / (k - 1) + (j < (L - l) % (k - 1)) + ' ';
33+
tmp += words[i + j + 1];
34+
}
35+
// for (i = 0; i < (L - tmp.length); i++) {
36+
// tmp += ' '
37+
// }
38+
tmp += Array(parseInt(L - tmp.length) + 1).join(" ");
39+
// tmp += L - tmp.length + ' ';
40+
res.push(tmp);
41+
}
42+
return res;
43+
}
44+
};

69-sqrt(x).js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @param {number} x
3+
* @return {number}
4+
*/
5+
const mySqrt = function(x) {
6+
r = x;
7+
while (r * r > x) r = ((r + x / r) / 2) | 0;
8+
return r;
9+
};

0 commit comments

Comments
 (0)