Skip to content

Commit 79f18ce

Browse files
committed
090?
1 parent 507bdd8 commit 79f18ce

13 files changed

+304
-0
lines changed

climbing-stairs.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function(n) {
6+
var result = 0
7+
function me(num) {
8+
if (num === 0 || num === 1) {
9+
result++
10+
return
11+
}
12+
me(num-2)
13+
me(num-1)
14+
}
15+
me(n)
16+
return result
17+
};
18+
/**
19+
* 递归的做法,有点慢,超时了
20+
* 第n个等于,第n-1 和 n-2 的和
21+
* 斐波那契数列
22+
*/
23+
var climbStairs = function(n) {
24+
if(n <= 2) return n
25+
return climbStairs(n-1) + climbStairs(n-2)
26+
};
27+
28+
var climbStairs = function(n) {
29+
if(n <= 3) return n
30+
var a = 2
31+
var b = 3
32+
var result = 5
33+
for (let i = 5; i <= n; i++) {
34+
a = result;
35+
result += b;
36+
b = a;
37+
}
38+
return result;
39+
};

contains-duplicate-ii.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {boolean}
5+
*/
6+
var containsNearbyDuplicate = function(nums, k) {
7+
var len = nums.length
8+
if (len <= 1) return false
9+
10+
var map = new Map()
11+
for (let i = 0; i < len; i++) {
12+
let key = nums[i]
13+
if (map.has(key) && i-map.get(key) <= k) return true
14+
map.set(key, i)
15+
}
16+
return false
17+
};

contains-duplicate.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
6+
var containsDuplicate = function(nums) {
7+
var len = nums.length
8+
if (len <= 1) return false
9+
10+
var map = new Map()
11+
for (let i = 0; i < len; i++) {
12+
let key = nums[i]
13+
map.set(key, map.has(key) ? map.get(key) + 1 : 1)
14+
}
15+
16+
for (let [key, value] of map) {
17+
if (value > 1) return true
18+
}
19+
return false
20+
};
21+
22+
/**
23+
* 上面那个 map 做法要写成精了
24+
* 用set优化一下,一个遍历
25+
*/
26+
var containsDuplicate = function(nums) {
27+
var len = nums.length
28+
if (len <= 1) return false
29+
30+
var map = new Set()
31+
for (let i = 0; i < len; i++) {
32+
let key = nums[i]
33+
if(map.has(key)) return true
34+
map.add(key)
35+
}
36+
return false
37+
};

excel-sheet-column-number.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
var titleToNumber = function(s) {
6+
var len = s.length
7+
var result = 0
8+
for (let i = 0; i < len; i++) {
9+
let x = s.charCodeAt(i) - 64
10+
result += x * Math.pow(26, len-1-i)
11+
}
12+
return result
13+
};

excel-sheet-column-title.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @param {number} n
3+
* @return {string}
4+
*/
5+
var convertToTitle = function(n) {
6+
n = n - 1
7+
if (n < 26) return String.fromCharCode(n + 65)
8+
return convertToTitle(~~(n/26)) + String.fromCharCode(n%26 + 65)
9+
};

factorial-trailing-zeroes.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var trailingZeroes = function(n) {
6+
n = ~~(n/5)
7+
return n === 0 ? 0 : n + trailingZeroes(n);
8+
};

happy-number.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {number} n
3+
* @return {boolean}
4+
*/
5+
6+
7+
var isHappy = function(n) {
8+
var map = new Set()
9+
10+
function me(n) {
11+
if (n===1) return true
12+
13+
var result = 0
14+
if (map.has(n)) return false
15+
16+
map.add(n)
17+
18+
while (n) {
19+
result += Math.pow(n%10, 2)
20+
n = ~~(n/10)
21+
}
22+
23+
return me(result)
24+
}
25+
26+
27+
return me(n)
28+
};

house-robber.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var rob = function(nums) {
6+
7+
var sum = 0
8+
var result = 0
9+
10+
function me(i) {
11+
// 选还是不选,取决于选了这个数,sum更大
12+
if(i >= nums.length) {
13+
result = Math.max(sum, result)
14+
return
15+
}
16+
// 不选
17+
me(i+1)
18+
// 选
19+
sum += nums[i]
20+
me(i+2)
21+
sum -= nums[i]
22+
}
23+
me(0)
24+
return result
25+
};

integer-to-roman.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* @param {number} num
3+
* @return {string}
4+
*/
5+
var romanint = function(n) {
6+
switch(n) {
7+
case 1: return 'I';
8+
case 5: return 'V';
9+
case 10: return 'X';
10+
case 50: return 'L';
11+
case 100: return 'C';
12+
case 500: return 'D';
13+
case 1000: return 'M';
14+
default: return '';
15+
}
16+
}
17+
var intToRoman = function(num) {
18+
var scale = [1000, 500, 100, 50, 10, 5, 1]
19+
var result = []
20+
let i = 0
21+
22+
while (num && i <= 6) {
23+
var x = ~~(num/scale[i])
24+
25+
if (x === 4) result += romanint(scale[i]) + romanint(scale[i-1])
26+
while (x>0 && x<4) {
27+
result += romanint(scale[i])
28+
x--
29+
}
30+
31+
num = num%scale[i]
32+
i++
33+
34+
}
35+
return result.replace(/VIV/, 'IX').replace(/DCD/, 'CM').replace(/LXL/, 'XC')
36+
};

roman-to-integer.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
var romanint = function(c) {
6+
switch(c) {
7+
case 'I': return 1;
8+
case 'V': return 5;
9+
case 'X': return 10;
10+
case 'L': return 50;
11+
case 'C': return 100;
12+
case 'D': return 500;
13+
case 'M': return 1000;
14+
default: return 0;
15+
}
16+
}
17+
var romanToInt = function(s) {
18+
var len = s.length
19+
var result = 0
20+
for( let i = 0; i < len; i++) {
21+
result += romanint(s[i])
22+
if (i > 0 && romanint(s[i]) > romanint(s[i-1])) {
23+
result -= 2*romanint(s[i-1])
24+
}
25+
}
26+
return result
27+
};

swap-nodes-in-pairs.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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} head
10+
* @return {ListNode}
11+
*/
12+
var swapPairs = function(head) {
13+
if (!head || !head.next) return head
14+
15+
var pointer = head
16+
while(pointer && pointer.next) {
17+
let temp = pointer.next.val
18+
pointer.next.val = pointer.val
19+
pointer.val = temp
20+
21+
pointer = pointer.next.next
22+
}
23+
return head
24+
};

ugly-number.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number} num
3+
* @return {boolean}
4+
*/
5+
var isUgly = function(num) {
6+
if (num === 1 || num === 2 || num === 3 || num === 5) return true
7+
if (num <= 0) return false
8+
9+
while(num) {
10+
if (num === 1 || num === 2 || num === 3 || num === 5) return true
11+
if (num%2 && num%3 && num%5) return false
12+
if (num%2 === 0) num = num/2
13+
else if (num%3 === 0) num = num/3
14+
else if (num%5 === 0) num = num/5
15+
}
16+
return true
17+
};

valid-anagram.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {boolean}
5+
*/
6+
var isAnagram = function(s, t) {
7+
if (s === t) return true
8+
9+
var len = s.length
10+
if (len !== t.length) return false
11+
12+
var smap = new Map()
13+
var tmap = new Map()
14+
for (let i = 0; i < len; i++) {
15+
let skey = s[i]
16+
let tkey = t[i]
17+
smap.set(skey, smap.has(skey) ? smap.get(skey) + 1 : 1)
18+
tmap.set(tkey, tmap.has(tkey) ? tmap.get(tkey) + 1 : 1)
19+
}
20+
for (let [key, value] of smap) {
21+
if (value !== tmap.get(key)) return false
22+
}
23+
return true
24+
};

0 commit comments

Comments
 (0)