和為k的子數組
中等
提示
給你一個整數數組?nums
?和一個整數?k
?,請你統計并返回?該數組中和為?k
?的子數組的個數?。
子數組是數組中元素的連續非空序列。
示例 1:
**輸入:**nums = [1,1,1], k = 2
**輸出:**2
示例 2:
**輸入:**nums = [1,2,3], k = 3
**輸出:**2
思路: 前綴和 加哈希表
function subarraySum(nums, k) {
let count = 0, sum = 0;
// 哈希表,鍵為前綴和,值為出現次數
const map = new Map([[0, 1]]);
for (const num of nums) {
sum += num;
// 查詢前綴和為 sum - k 的出現次數
if (map.has(sum - k)) {
count += map.get(sum - k);
}
// 將前綴和加入哈希表
map.set(sum, (map.get(sum) || 0) + 1);
}
return count;
}
爬樓梯
假設你正在爬樓梯。需要?n
?階你才能到達樓頂。
每次你可以爬?1
?或?2
?個臺階。你有多少種不同的方法可以爬到樓頂呢?
function climbStairs(n) {if (n <= 2) {return n;}let dp = new Array(n + 1).fill(0);dp[1] = 1;dp[2] = 2;for (let i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
楊輝三角
給定一個非負整數 numRows,生成「楊輝三角」的前 numRows 行。
示例 1:
輸入: numRows = 5
輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
輸入: numRows = 1
輸出: [[1]]
var generate = function(numRows) {if(numRows === 1){return [[1]]}if(numRows === 2){return [[1],[1,1]]}let triangle = [];for (let i = 0; i < numRows; i++) {triangle[i] = new Array(i + 1);triangle[i][0] = 1; // 每行的第一列為1triangle[i][i] = 1; // 每行的最后一列為1for (let j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}}return triangle;};