算法面试作业

145 阅读1分钟
  • 1、用递归算法实现,生成数组,长度为5且元素的随机数在2-32间不重复的值(不能超过10行)
var _set = new Set()
function createArr(){
  _set.size == 5 ? (console.log([..._set])) : (_set.add((Math.random()*31+2)|0), createArr())
}
createArr()

  • 2、将下划线命名转换成大驼峰命名
function toCamel(str) {
  return str.replace(/(\w)(_)(\w)/,( match,$1,$2,$3 )=> `${$1}${$3.toUpperCase()}`)
}
  • 3、统计整数二进制中的1的个数
Number(num).toString(2).split('0').join('').length 
  • 4、统计2-1000之间的素数
let arr = [2,3]
for(let i = 4 ; i<100 ; i++){
  let flag = true
  for(let j=2 ; j <=i/2 ; j++){  //这里一般都会想到 i/2 ,其实最优解是 Math.sqrt(i)
    if(i%j == 0){
      flag = false
      break
    }
  }
  if(flag) arr.push(i)
}
console.log([...arr])
  • 5、写一个简单的加密,解密算法(通过对每个字符的unicode偏移产生新的字符)
function encode(str,padding=5) {
  return !str?str:str.split('').map(function(s){ return String.fromCharCode(s.charCodeAt()+padding)}).join('')
}
function decode(str,padding=5){
  return !str?str:str.split('').map(function(s){ return String.fromCharCode(s.charCodeAt()-padding)}).join('')
}