首页 > 代码库 > FCC之JS基础算法总结1

FCC之JS基础算法总结1

1.翻转字符串

解决思路:先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

 

1 function reverseString(str) {
2   var arr = [];   
3   arr = str.split("");
4   arr.reverse();
5   str = arr.join("");
6   return str;
7 }
8 
9 reverseString("hello");

 

主要是对String.split(),Array.reverse(),Array.join()的熟悉运用。

2.计算一个整数的阶乘

解决思路:F(n)=n*F(n-1)

 

 1 function factorialize(num) {
 2   if(num <= 1) {
 3     return 1;
 4   } else {
 5     num = num * factorialize(num - 1);
 6   }
 7   return num;
 8 }
 9 
10 factorialize(5);

 

 

这就是一个递归函数,在学习《JS高级程序设计》的递归函数发现,如上代码会在进行浅复制并把factorialize=null时出错,因此应用arguments.callee指向正在执行的指针

1 function factorialize(num) {
2   if(num <= 1) {
3     return 1;
4   } else {
5     num = num * arguments.callee(num-1);
6   }
7   return num;
8 }

但是在严格模式下,不能访问arguments.callee。再次改进如下

1 var factorialize = (function f(num) {
2   if(num <= 1) {
3     return 1;
4   } else {
5     num = num * f(num-1);
6   }
7   return num;
8 }

3.检查字符串是否回文

解决思路:首先忽略字符串标点符号、大小写和空格,然后将字符串分解为数组后反转再拼接为新字符串,比较前后两字符串

 

 1 function palindrome(str) {
 2   // Good luck!
 3   str = str.replace(/\W+/g,"");
 4   str = str.replace(/\_+/g,"");
 5   str = str.toLowerCase();
 6   var arr = str.split("");
 7   arr = arr.reverse();
 8   var str2 = arr.join("");
 9   if (str == str2) {
10     return true;
11   } else {
12     return false;
13   }
14 }
15 palindrome("almostomla");

 

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

解决思路:迭代比较单词长度

 

 1 function findLongestWord(str) {
 2   var arr = str.split(" ");
 3   var arr2 = [];
 4   var a = 0;
 5   for(var i = 0; i < arr.length; i++) {
 6     var b = arr[i].length; 
 7     if(b > a) {
 8       a = b;
 9     }
10 }
11   return a;
12 }
13 findLongestWord("What if we try a super-long word such as otorhinolaryngology");

 

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

解决思路:所有单词均先转换为小写,然后迭代替换每个单词首字母

 

 1 function titleCase(str) {
 2   str = str.toLowerCase();
 3   var arr = str.split(" ");
 4   var str2 = "";
 5   var arr2 = [];
 6   for(var i = 0; i < arr.length; i++) {
 7     var a = arr[i][0].toUpperCase();
 8     var str1 = arr[i].replace(/^\w/,a);
 9     arr2.push(str1);
10   }
11   str2 = arr2.join(" ");
12   return str2;
13 }
14 
15 titleCase("I‘m a little tea pot");

 

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

解决思路:第一种方法,迭代查找最大值

function largestOfFour(arr) {
var
arr1 = []; for(var i = 0; i < arr.length; i++) { var a = 0; for(var j = 0; j < arr[i].length; j++) { if(arr[i][j] > a) { a = arr[i][j]; } } arr1.push(a); } return arr1; }

第二种方法,直接运用Math.max()

1 function largestOfFour(arr) {
2 var arr2 = [];
3   for(var i = 0; i < arr.length; i++) {
4     var arr1 = arr[i];
5     var a = Math.max.apply(null,arr1);
6     arr2.push(a);
7   }
8   return arr2;
9 }

7.检查一个字符串是否以指定的字符串结尾

 1 function confirmEnding(str, target) {
 2   var a = target.length;
 3   var b = str.substr(-a);
 4   if(b == target) {
 5     return true;
 6   } else {
 7     return false;
 8   }
 9 }
10 
11 confirmEnding("Bastian", "n");

8.重复一个指定的字符串 n

 1 function repeat(str, num) {
 2   var arr = [];
 3   for(var i= 0; i < num; i++) {
 4     arr[i] = str;
 5   }
 6   str = arr.join("");
 7   return str;
 8 }
 9 
10 repeat("abc", 3);

 

FCC之JS基础算法总结1