FCC 16个初级算法解

1.翻转字符串


function reverseString(str) {
var a=str.split("").reverse().join("");
  return a;
}
reverseString("hello");

2.计算一个整数的阶乘


function factorialize(num) {
  if(num===0){
    return 1;
 }
  else{
    var a=num;
      for(var i=num;i>1;i--){
        a=a*(i-1);
      }
    return a;
  }
}
factorialize(5);

3.如果给定的字符串是回文,返回true,反之,返回false。如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。


function palindrome(str) {
    var str1=str.replace(/\W/g,"").replace(/\_/g,"").toLowerCase();
    var str2=str.replace(/\W/g,"").replace(/\_/g,"").toLowerCase().split("").reverse().join("");
    return str1==str2;
}
palindrome("eye");

4.找到提供的句子中最长的单词,并计算它的长度。


function findLongestWord(str) {
  var arr=str.split(" ");
  var leng=0;
  for(var i=0;i<arr.length;i++){
    if(arr[i].length>leng){
       leng=arr[i].length;
    }
  } 
  return leng;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

5.使字符串的每个单词首字母都大写,其余部分小写。


function titleCase(str) {
    return str.toLowerCase().replace(/( |^)[a-z]/g, (x=> x.toUpperCase());
}
titleCase("I'm a little tea pot");

6.右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。


function largestOfFour(arr) {
  var newarr=[];
  for(var i=0;i<arr.length;i++){
    var num=0;
    for(var j=0;j<arr[i].length;j++){
     if(arr[i][j]>num){
       num=arr[i][j];
     }
    }
    newarr[i]=num;
  }
  return newarr;
}
largestOfFour([[4513], [13271826], [32353739], [100010018571]]);

7.检查一个字符串(str)是否以指定的字符串(target)结尾。如果是,返回true;如果不是,返回false。


function confirmEnding(strtarget) {
  var n=target.length;
  var lastword=str.substr(-n,n);
  return lastword==target;
}
confirmEnding("Bastian""n");

8.重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。


function repeat(strnum) {
  var str1="";
  for(var i=0;i<num;i++){
    str1 +=str;
  }
  return str1;
}
repeat("abc"3);

9.如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。


function truncate(strnum) {
  if(str.length>num){
      var arr=str.split("");
      var newstr="";
      if(num>3){
        for(var i=0;i<num-3;i++){
           newstr = newstr+arr[i]; 
          }
      }
      else{
         for(var j=0;j<num;j++){
           newstr = newstr+arr[j]; 
          }
       }
     return newstr+"...";
  }  
  else {
    return str;
  }
}
truncate("A-tisket a-tasket A green and yellow basket"11);

10.把一个数组arr按照指定的数组大小size分割成若干个数组块。


function chunk(arrsize) {
  var newArray=[];
  for(var i=0;i<arr.length;i+=size){
    newArray.push(arr.slice(i,i+size));
  }
  return newArray;
}
chunk(["a""b""c""d"], 2);

11.返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始。


function slasher(arrhowMany) {
  arr.splice(0howMany);
  return arr;
}
slasher([123], 2);

12.如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。


function mutation(arr) {
  var str0=arr[0].toLowerCase();
  var str1=arr[1].toLowerCase();
  var myarr=str1.split("");
  var num=0;
  for(var i=0;i<myarr.length;i++){
    if (str0.indexOf(myarr[i]) !== -1){
      num++;
    }
  }
  return num==myarr.length;
}
mutation(["hello""hey"]);

13.删除数组中的所有假值。在JavaScript中,假值有falsenull0""undefinedNaN


function bouncer(arr) {
  var newArray = arr.filter(function(x){
    return Boolean(x);  
  });
  return newArray;
}
bouncer([7"ate"""false9]);

14.实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。


function destroyer(arr) {
  var newArray = [];
  for(var i = 1i < arguments.lengthi++){
    newArray.push(arguments[i]);
  }
  var temp = arr.filter(function(x){
    return newArray.indexOf(x) < 0;
  });
  return temp;
}
destroyer([123123], 23);

15.先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。


function where(arrnum) {
  arr.push(num);
  arr.sort(function(ab) {
    return a - b;
  }); 
  for(var i=0;i<arr.length;i++){
    if(arr[i]==num){
      return i;
    }
  }
}
where([4060], 50);

16.rot13加密,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。


function rot13(str) { 
   return str.replace(/[a-z]/gifunction (x) {
      return String.fromCharCode(x.charCodeAt(0) + (x.toLowerCase() < 'n' ? 13 : -13));
   });
}
rot13("SERR PBQR PNZC");

 

posted @ 2017-03-18 17:45  森森森shen  阅读(262)  评论(0编辑  收藏  举报