Fizz Buzz
Fizz Buzz
给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:
answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。
answer[i] == “Fizz” 如果 i 是 3 的倍数。
answer[i] == “Buzz” 如果 i 是 5 的倍数。
answer[i] == i (以字符串形式)如果上述条件全不满足。
输入:n = 3
输出:[“1”,”2”,”Fizz”]
输入:n = 5
输出:[“1”,”2”,”Fizz”,”4”,”Buzz”]
123456789101112131415161718192021var fizzBuzz = function(n) { let res = []; for(let i=1; i<=n;i++){ const yushu3 = i%3; const yushu5 = i%5; if(yushu3 === ...
左叶子之和
左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。
输入: root = [3,9,20,null,null,15,7]
输出: 24
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
123456789101112131415161718var sumOfLeftLeaves = function(root) { let number = 0; const sum = (root) => { //边界条件 if (root === null) { return; } //是左叶子节点 if (root.left && !root.left.left && !root.left.right) { number = number + root.left.val; } //不是左叶子节点 sum(root.left); sum(root.right); ...
单词规律
单词规律
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
输入: pattern = “abba”, s = “dog cat cat dog”
输出: true
输入:pattern = “abba”, s = “dog cat cat fish”
输出: false
1234567891011121314151617var wordPattern = function(pattern, str) { const obj = {},arr = str.split(' '),n = arr.length; if(pattern.length !== n) return false; for(let i = 0;i<n;i++){ if(obj[pattern[i]]){ if(obj[pat ...
回文数
回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
输入:x = 121
输出:true
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
123456789var isPalindrome = function(x) { if(x < 0 || (!(x % 10) && x)) return false; let x2 = x, res = 0; while(x2){ res = res * 10 + x2 % 10; x2 = ~~(x2 / 10); } return res === x;};
移除元素
移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,3,0,4]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。-
1234567891011var removeElement = functio ...
字符串中的单词数
字符串中的单词数
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。
输入: “Hello, my name is John”
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。
123var countSegments = function(s) { return (s.split(" ").filter(str=>/[a-zA-Z\S]/.test(str))).length;};
用队列实现栈
用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
[“MyStack”, “push”, “push”, “top”, “pop”, “empty”][[], [1], [2], [], [], []]
输出:[null, null, null, 2, 2, false]
解释:MyStack myStack = new MyStack();myStack.push(1);myStack.push(2);myStack.top(); // 返回 2myStack.pop(); // 返回 2myStack.empty(); // 返回 False
1234567891011121314151617181920212223242526272829 ...
完全二叉树的节点个数
完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
输入:root = [1,2,3,4,5,6]
输出:6
输入:root = []
输出:0
输入:root = [1]
输出:1
123456789101112131415161718var countNodes = function(root) { if(!root) return 0; let count = 1; const dfs = function(node){ if(node.left) { count ++; dfs(node.left); } if(node.right) { count ...
存在重复元素 II
存在重复元素 II
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
输入:nums = [1,2,3,1], k = 3
输出:true
输入:nums = [1,0,1,1], k = 1
输出:true
12345678910111213var containsNearbyDuplicate = function(nums, k) { const set = new Set(); for(let i = 0; i < nums.length; i++) { if(set.has(nums[i])) { return true; } set.add(nums[i]); if(set.size > k) { se ...
存在重复元素
存在重复元素
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
输入:nums = [1,2,3,1]
输出:true
输入:nums = [1,2,3,4]
输出:false
1234567891011var containsDuplicate = function(nums) { let map = new Map(); for(let i of nums){ if(map.has(i)){ return true; }else{ map.set(i, 1); } } return false};