hardman
const hardMan = (name: string, isInit = true, queue: Function[] = []) => {
const nextFunc = () => {
queue.shift()?.();
};
if (isInit) {
queue.push(() => {
console.log(`Hi! I am ${name}.`);
nextFunc();
});
setTimeout(nextFunc, 0);
}
const nextHardMan = () => hardMan(name, false, queue);
return {
study (thing: string) {
queue.push(() => {
console.log(`I am studying ${thing}.`);
nextFunc();
});
return nextHardMan();
},
rest (delay: number) {
queue.push(() => {
setTimeout(() => {
console.log(`Wait ${delay} seconds.`);
nextFunc();
}, delay * 1e3);
});
return nextHardMan();
},
restFirst (delay: number) {
queue.unshift(() => {
setTimeout(() => {
console.log(`Wait ${delay} seconds.`);
nextFunc();
}, delay * 1e3);
});
return nextHardMan();
}
};
};
打家劫舍2
const djjs = (arr: ReadonlyArray<number>) => {
const { length } = arr;
if (length === 0) {
return null;
}
if (length === 1) {
return arr[0];
}
return Math.max(djjsRange(0, length - 2, arr), djjsRange(1, length - 1, arr));
};
const djjsRange = (start: number, end: number, arr: ReadonlyArray<number>) => {
if (end - start <= 0) {
return arr[start];
}
const dp: number[] = [];
dp[start] = arr[start];
dp[start + 1] = Math.max(arr[start], arr[start + 1]);
for (let i = start + 2; i <= end; i++) {
dp[i] = Math.max(dp[i - 2] + arr[i], dp[i - 1]);
}
return dp[dp.length - 1];
};
打家劫舍3
var rob = function(root) {
const dfs = (node) => {
if (node === null) {
return [0, 0];
}
const l = dfs(node.left);
const r = dfs(node.right);
const selected = node.val + l[1] + r[1];
const notSelected = Math.max(l[0], l[1]) + Math.max(r[0], r[1]);
return [selected, notSelected];
}
const rootStatus = dfs(root);
return Math.max(rootStatus[0], rootStatus[1]);
};
字符串相加
var addStrings = function(num1, num2) {
let i = num1.length - 1, j = num2.length - 1, add = 0;
const ans = [];
while (i >= 0 || j >= 0 || add != 0) {
const x = i >= 0 ? num1.charAt(i) - '0' : 0;
const y = j >= 0 ? num2.charAt(j) - '0' : 0;
const result = x + y + add;
ans.push(result % 10);
add = Math.floor(result / 10);
i -= 1;
j -= 1;
}
return ans.reverse().join('');
};
最长字符串链
var longestStrChain = function(words) {
const cnt = new Map();
words.sort((a, b) => a.length - b.length);
let res = 0;
for (const word of words) {
cnt.set(word, 1);
for (let i = 0; i < word.length; i++) {
const prev = word.substring(0, i) + word.substring(i + 1);
if (cnt.has(prev)) {
cnt.set(word, Math.max(cnt.get(word), cnt.get(prev) + 1));
}
}
res = Math.max(res, cnt.get(word));
}
return res;
};