转换成小写字母
转换成小写字母
给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。不适用JS内置方法
输入:s = “Hello”
输出:”hello”
输入:s = “here”
输出:”here”-
1234567891011const a = 'a'.charCodeAt(), A = 'A'.charCodeAt(), Z = 'Z'.charCodeAt()const toLowerCase = function(s) { const ans = [] for(let i=0;i<s.length;i++){ if(s.charCodeAt(i) >= A && s.charCodeAt(i) <= Z) ans.push(String.fromCharCode(a + s.charCodeAt(i) - A)) else ans.push(s.ch ...
宝石与石头
宝石与石头
给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。字母区分大小写,因此 “a” 和 “A” 是不同类型的石头。
输入:jewels = “aA”, stones = “aAAbbbb”
输出:3
输入:jewels = “z”, stones = “ZZ”
输出:0-
1234567891011var numJewelsInStones = function(jewels, stones) { jewels = jewels.split(''); return stones.split('').reduce((prev, val) => { for (const ch of jewels) { if (ch === val) { return prev + ...
分数到小数
分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。
输入:numerator = 1, denominator = 2
输出:”0.5”
输入:numerator = 2, denominator = 1
输出:”2”
输入:numerator = 4, denominator = 333
输出:”0.(012)”
1234567891011121314// 被除数和除数取绝对值。结果正负用两者取反右移31位,符号位0为正,-1为负。两者取余// 余数为空,除转字符串// 余数不为空:余数 * 10继续除除数,记录每次余数(值为索引值)和商。迭代余数// 除尽 或 除不尽,超精度:余数终为0。按记录商还原小数(记录无重复h[r]不存在)// 除不尽,循环:某次余数记录过,当前索引值 与 记录的余数索引值,为循环数边界var fractionToDec ...
盛最多水的容器
盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。
输入:[1,8,6,2,5,4,8,3,7]
输出:49
输入:height = [1,1]
输出:1
12345678var maxArea = function(height) { let res = 0 for (let i = 0, j = height.length - 1; i < j; ) { res = Math.max(res, Math.min(height[i], height[j]) * (j - i)) height[i] < height[j] ? i++ : j-- } return res};
种花问题
种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。
输入:flowerbed = [1,0,0,0,1], n = 1
输出:true
输入:flowerbed = [1,0,0,0,1], n = 2
输出:false
12345678910111213var canPlaceFlowers = function(flowerbed, n) { flowerbed.unshift(0) flowerbed.push(0) let count = 0; let len = flowerbed.length; for (let i = 0; i < len; i++) { if (flowerbed[i- ...
反转字符串
反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
输入:s = [“h”,”e”,”l”,”l”,”o”]
输出:[“o”,”l”,”l”,”e”,”h”]
输入:s = [“H”,”a”,”n”,”n”,”a”,”h”]
输出:[“h”,”a”,”n”,”n”,”a”,”H”]
12345678var reverseString = function(s) { let len = s.length; for(let i=0; i< len/2; i++){ let temp = s[i]; s[i] = s[len-1-i]; s[len-1-i] = temp; }};
两个数组的交集
两个数组的交集
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
1234var intersection = function(nums1, nums2) {// 先去重,然后遍历、筛选 return [...new Set(nums1)].filter(n => nums2.includes(n));};
分割回文串
分割回文串
给一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。
输入:s = “aab”
输出:[[“a”,”a”,”b”],[“aa”,”b”]]
输入:s = “a”
输出:[[“a”]]
12345678910111213141516171819202122232425const partition = function(s) { const res = [], path = [], len = s.length; backtracking(0); return res; function backtracking(i) { if(i >= len) { res.push(Array.from(path)); return; } for(let j = i; j < len; j++) { ...
加油站
加油站
在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。
输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
输出: 3
解释:从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。因此,3 可为起始索引。
输入: gas = [2,3, ...
复原 IP 地址
复原 IP 地址
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:”0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、”192.168.1.312” 和 “192.168@1.1“ 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
输入:s = “25525511135”
输出:[“255.255.11.135”,”255.255.111.35”]
输入:s = “0000”
输出:[“0.0.0.0”]
123456789101112131415161718192021222324252627var restoreIpAddresses = f ...