FCC之JS基础算法总结1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
FCC JS基础算法题:Slasher Flick(截断数组)
FCC JS基础算法题:Factorialize a Number(计算一个整数的阶乘)
FCC JS基础算法题:Reverse a String(翻转字符串)