FreeCodeCamp基础算法题答案解析Word格式文档下载.docx
《FreeCodeCamp基础算法题答案解析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FreeCodeCamp基础算法题答案解析Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
return-1;
}elseif(num===0){
return1;
}
else{
returnnum*factorialize(num-1);
factorialize(5);
//120
CheckforPalindromes
如果給定的字符串是回文,返回true,反之,返回false。
如果一個字符串忽略標點符號、大小寫和空格,正著讀和反著讀一模一樣,那麼這個字符串就是palindrome(回文)。
functionpalindrome(str){
returnstr.replace(/[\W_]/g,'
).toLowerCase()===str.replace(/[\W_]/g,'
).toLowerCase().split('
FindtheLongestWordinaString
找到提供的句子中最長的單詞,並計算它的長度。
函數的返回值應該是一個數字。
//法一
/*functionfindLongestWord(str){
myStr=str.split('
'
varlongest=0;
for(vari=0;
ilongest){
longest=myStr[i].length;
returnlongest;
*/
//法二
functionfindLongestWord(str){
vararrnum=[];
for(i=0;
i<
myStr.length;
i++){
arrnum.push(myStr[i].length);
returnMath.max.apply(null,arrnum);
findLongestWord("
Thequickbrownfoxjumpedoverthelazydog"
TitleCaseaSentence
functiontitleCase(str){
vararr=str.toLowerCase().split('
for(i=0;
arr.length;
varchar=arr[i].charAt(0);
arr[i]=arr[i].replace(char,char.toUpperCase());
returnarr.join('
vararr=str.toLowerCase().split('
for(variinarr){
arr[i]=arr[i].replace(arr[i].charAt(0),arr[i].charAt(0).toUpperCase());
titleCase("
I'
malittleteapot"
ReturnLargestNumbersinArrays
右邊大數組中包含了4個小數組,分別找到每個小數組中的最大值,然後把它們串聯起來,形成一個新數組。
functionlargestOfFour(arr){
varnewArr=[];
for(vari=0;
i<
arr.length;
newArr[i]=Math.max.apply(null,arr[i]);
returnnewArr;
largestOfFour([[4,5,1,3],[13,27,18,26],[32,35,37,39],[1000,1001,857,1]]);
ConfirmtheEnding
檢查一個字符串(str)是否以指定的字符串(target)結尾。
functionconfirmEnding(str,target){
returnstr.substr(-target.length)===target;
confirmEnding("
Bastian"
"
n"
Repeatastringrepeatastring
重複一個指定的字符串num次,如果num是一個負數則返回一個空字符串。
functionrepeat(str,num){
returnnum>
0?
str.repeat(num):
"
"
;
repeat("
abc"
3);
Truncateastring
截斷一個字符串!
如果字符串的長度比指定的參數num長,則把多餘的部分用...來表示。
切記,插入到字符串尾部的三個點號也會計入字符串的長度。
但是,如果指定的參數num小於或等於3,則添加的三個點號不會計入字符串的長度。
functiontruncate(str,num){
if(str.length3){
num-=3;
vartruncted=str.substr(0,num);
returntruncted+"
..."
truncate("
A-tisketa-tasketAgreenandyellowbasket"
11);
ChunkyMonkey
把一個數組arr按照指定的數組大小size分割成若干個數組塊。
<
spantype="
button"
data-toggle="
tooltip"
data-placement="
top"
data-clipboard-text="
functionchunk(arr,size){
varmyArr=[];
i
i+=size){
myArr.push(arr.slice(i,size+i));
returnmyArr;
chunk(["
a"
b"
c"
d"
],2);
SlasherFlick
返回一個數組被截斷n個元素後還剩餘的元素,截斷從索引0開始。
functionslasher(arr,howMany){
returnarr.slice(howMany);
slasher([1,2,3],2);
Mutations
如果數組第一個字符串元素包含了第二個字符串元素的所有字符,函數返回true。
functionmutation(arr){
vararr1=arr[0].toLowerCase();
vararr2=arr[1].toLowerCase();
arr2.length;
if(arr1.indexOf(arr2[i])<
0)returnfalse;
returntrue;
mutation(["
hey"
]);
FalsyBouncer
刪除數組中的所有假值。
在JavaScript中,假值有false、null、0、"
、undefined和NaN。
functionbouncer(arr){
returnarr.filter(Boolean);
bouncer([7,"
ate"
false,9]);
等同於:
returnarr.filter(function(item,index,array){
returnBoolean(item);
});
SeekandDestroy
實現一個摧毀(destroyer)函數,第一個參數是待摧毀的數組,其餘的參數是待摧毀的值。
functiondestroyer(arr){
vararr1=Array.from(arguments)[0];
vararr2=Array.from(arguments).slice
(1);
returnarr1.filter(function(item){
returnarr2.indexOf(item)<
0;
destroyer([1,2,3,1,2,3],2,3);
WheredoIbelong
先給數組排序,然後找到指定的值在數組的位置,最後返回位置對應的索引。
functionwhere(arr,num){
arr.push(num);
//插入
arr.sort(function(a,b){
returna-b;
//排序
returnarr.indexOf(num);
where([40,60],50);
下面我們來介紹風靡全球的凱撒密碼Caesarcipher,又叫移位密碼。
移位密碼也就是密碼中的字母會按照指定的數量來做移位。
一個常見的案例就是ROT13密碼,字母會移位13個位置。
由'
A'
?
N'
'
B'
O'
,以此類推。
寫一個ROT13函數,實現輸入加密字符串,輸出解密字符串。
所有的字母都是大寫,不要轉化任何非字母形式的字符(例如:
空格,標點符號),遇到這些特殊字符,跳過它們。
functionrot13(str){//LBHQVQVG!
varindex=null;
vartemp="
var_A="
A"
.charCodeAt(0);
var_Z="
Z"
varmid=(_A+_Z)/2;
i=_A&
&
index<
=mid){
temp+=String.fromCharCode(index+13);
}elseif(indexmid){
temp+=String.fromCharCode(index-13);
temp+=String.fromCharCode(index);
returntemp;
//傳入的字符串都是大寫,而大寫字母A到Z的Unicode值是升序排列的。
加密算法的核心是前13個字母Unicode值加13,後13個字母Unicode值減13從字母表重新回滾。
而其他大寫字母以外的空白符