算法学习之路!!!
1.观察下面的规律,写一个函数accum
. 2018/8/13
accum("abcd"); // "A-Bb-Ccc-Dddd"accum("RqaEzty"); // "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"accum("cwAt"); // "C-Ww-Aaa-Tttt"复制代码
参考答案:
function accum(s) { return s.split('').map((c, i) => (c.toUpperCase() + c.toLowerCase().repeat(i))).join('-')}复制代码
2.写一个函数求数组的最大值和最小值
. 2018/8/14
highAndLow("1 2 3 4 5"); // return "5 1"highAndLow("1 2 -3 4 5"); // return "5 -3"highAndLow("1 9 3 4 -5"); // return "9 -5"复制代码
参考答案:
function highAndLow(numbers){ numbers = numbers.split('') return `${ Math.max(...numbers)} ${ Math.min(...numbers)}`}复制代码
3.写一个函数判断字符串中x的数量和o的数量是否相等(忽略大小写):
. 2018/8/15
XO("ooxx") => trueXO("xooxx") => falseXO("ooxXm") => trueXO("zpzpzpp") => true // 没有x也没有o,所有相等,都为0XO("zzoo") => false复制代码
参考答案:
function XO1(str) { str = str.toLowerCase().split('') return str.filter(x => x === 'x').length === str.filter(x => x === 'o').length}function XO2(str) { return (str.match(/x/ig) || []).length === (str.match(/o/ig) || []).length;}复制代码
4.写一个函数判断一个数字是不是某个整数的平方。
. 2018/8/16
is_square (-1) # => falseis_square 0 # => trueis_square 3 # => falseis_square 4 # => trueis_square 25 # => trueis_square 26 # => false复制代码
参考答案
// 答案1function isSquare(n) { return Math.sqrt(n) % 1 === 0}// 答案2function isSquare(n) { return Number.isInteger(Math.sqrt(n)}// 答案3function isSquare(n){ const s = Math.sqrt(n) return s === (s | 0) // return s === ( ~~s )}复制代码
5.写一个函数,将字符串除了最后的四位,其他都变成
maskify("4556364607935616") == "############5616"maskify( "64607935616") == "#######5616"maskify( "1") == "1"maskify( "") == ""// "What was the name of your first pet?"maskify("Skippy") == "##ippy"maskify("Nananananananananananananananana Batman!") == "####################################man!"复制代码
参考答案:
function maskify(cc) { return cc.slice(0, -4).replace(/./g, '#') + cc.slice(-4)}复制代码
6.下面三角形的数列:rowSumOddNumbers()
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 ... rowSumOddNumbers(1) // 1 rowSumOddNumbers(2) // 3+5=8 rowSumOddNumbers(3) // 7+9+11=27 rowSumOddNumbers(42) // 74088复制代码
参考答案:
function rowSumOddNumbers(n) { return Math.pow(n,3)}幂运算:Math.pow(base,num)base ** num复制代码
7.将数字的每一位求平方,然后组合成新的数字(注意:请返回一个数字)
squareDigits(9119) // 811181 参考答案:
function squareDigits(num){ return +num.toString().split('').map(i => i*i).join('')}复制代码
8.写一个函数solution,求比一个数字n小的所有3和5的整数倍数和。
. 2018年8月20日
- 比如10,比它小的3、5整数倍数有: 3,5,6,9, 所以和为23。 比如16, 比它小的3,5整数倍数有: 3,5,6,9,10,12,15,所以和为60(15只计算1次)
示例
solution(10) // 23solution(16) // 60复制代码
参考答案:
function solution(number){ if(number < 0) return 0 return [...Array(number).keys()] .filter(n => n % 3 === 0 || n % 5 === 0) .reduce((a, b) => a + b,0)}// 另一种方法,参考周末学的等差数列求和function solution(n) { const n3 = Math.floor((n-1)/3) const n5 = Math.floor((n-1)/5) const n15 = Math.floor((n-1)/15) return (n3+1)*(n3*3)/2 + (n5+1)*(n5*5)/2 - (n15+1)*(n15*15)/2}复制代码