打对号的为JS可以做的题目,其他的只能用C、C++、Java或Python等后端语言去写。
当两个数不同时,a + b = (a ^ 2 - b ^ 2)/(a - b);
当两个数相同时,a + b = 2 * a 或者 2 * b;
const aplusb = function (a, b) {
if(a === b) return 2 * a
else return (Math.pow(a,2)-Math.pow(b,2)) / (a-b)
}
既然他让求多少个零, 那么, 在什么情况下能够得到 0 呢?
当然, 出现 5 的倍数的情况下, 不就会出现一个 0 吗? (5 x 2 = 10)
那么出现 5^2 的时候, 将会出现 00 的情况 (25 x 4 = 100)
const trailingZeros = function (n) {
var res = 0;
while(n>0) {
n=parseInt(n/5);
res+=n;
}
return res
}
首先输入一个数字,我们要得到从0到这个数字的遍历,于是创建一个数组arr,得到遍历,之后转化成字符串,只需要看我们要查找的数字再这个字符串中出现几次就可以了。
const digitCounts = function (k, n) {
let arr = [];
for (let i=0; i<=n; i++) { arr.push(i) }
arr = arr.join('').split('') // 数组转字符串再转回数组
let flag = 0
for( let i = 0; i < arr.length; i++) {
if(k == arr[i]) flag++
}
return flag
}
说法一(ugly number):把只包含质因子2,3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但7、14不是,因为它们包含质因子7。 习惯上我们把1当做是第一个丑数。
说法二(humble number):对于一给定的素数集合 S = {p1, p2, …, pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S。这个正整数集合包括,p1、p1p2、p1p1、p1p2p3…(还有其它)。该集合被称为S集合的“丑数集合”。
根据题目的解释,应该更贴近说法一。
const nthUglyNumber = function (n) {
if(n === 0) return 0;
let uglyNum = [1];
let t2 = 0,t3 = 0,t5 = 0;
for(let i=1; i<n; i++){
uglyNum[i] = Math.min(uglyNum[t2]*2,uglyNum[t3]*3,uglyNum[t5]*5);
if(uglyNum[i] === uglyNum[t2] * 2) t2++;
if(uglyNum[i] === uglyNum[t3] * 3) t3++;
if(uglyNum[i] === uglyNum[t5] * 5) t5++;
}
return uglyNum[n - 1];
}
本题为个人认为前十题中相对其他题目比较简单的一题了,首先输入的是一个数组,利用sort对数组进行排序,然后直接输出第k大元素,治理注意要对应索引。
const kthLargestElement = function (n, nums) {
return nums.sort((a, b) => b - a)[n - 1]
}
先用concat合并数组,再用sort函数进行排序,sort函数对数组进行快速排序大家一定要会用哦~
const mergeSortedArray = function (A, B) {
return A.concat(B).sort((a,b)=>a-b)
}
const fizzBuzz = function (n) {
var arr = []
while (n!==0){
if(n%3===0&&n%5!==0) arr.push('fizz')
else if(n%5===0&&n%3!==0) arr.push ('buzz')
else if(n%15===0) arr.push('fizz buzz')
else arr.push(String(n))
n--
}
return arr.reverse()
}