成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

FreeCodeCamp 初級(jí)算法題 - 翻轉(zhuǎn)字符串

OpenDigg / 1684人閱讀

摘要:比如,就是獲取第一個(gè)字符。后面的暫時(shí)不會(huì)執(zhí)行直到遇見(jiàn)傳入的字符串為,因?yàn)橛辛朔祷刂?,就不?huì)再去調(diào)用了。

原文鏈接:http://singsing.io/blog/2017/...

翻轉(zhuǎn)字符串 (Reverse a String) 題目鏈接

中文鏈接

英文鏈接

級(jí)別:初級(jí) (Basic Algorithm Scripting)

問(wèn)題解釋

這個(gè) function 接收一個(gè)字符串參數(shù),返回翻轉(zhuǎn)后的字符串

比如接收的是 "hello",那么輸出就是 "olleh"

參考鏈接

String.split()

Array.reverse()

Array.join()

思路提示

先把字符串分割成為數(shù)組

翻轉(zhuǎn)數(shù)組

把翻轉(zhuǎn)后的數(shù)組合并為字符串

參考答案 基本答案
function reverseString(str) {
    var strArr = str.split("");
    var reversedArr = strArr.reverse();
    return reversedArr.join("");
}
解釋

第一步就是把傳入的 str 分割,并賦值給 strArr

第二步是把數(shù)組翻轉(zhuǎn),并賦值給 reversedArr

第三步是返回合并之后的字符

需要注意的是,以上的 .split.join 都不會(huì)改變?cè)瓉?lái)的字符串或數(shù)組,但 reverse 會(huì)改變?cè)瓉?lái)的數(shù)組

優(yōu)化
function reverseString(str) {
    return str.split("").reverse().join("");
}
解釋

.split 返回分割后的數(shù)組,因此可以直接調(diào)用 .reverse

.reverse() 方法返回的是翻轉(zhuǎn)后的數(shù)組,因此可以直接調(diào)用 .join

.join 之后就是我們想要的字符串,直接返回即可

這里用到了 Method Chaining,也就是方法的鏈?zhǔn)秸{(diào)用。只要你熟悉方法的返回值,就可以這么做,好處在于可以不用創(chuàng)建這么多變量

中級(jí)解法

直接利用字符串方法,而不需要轉(zhuǎn)換成數(shù)組

function reverseString(str) {
    var result = "";
    for (var i = str.length - 1; i >= 0; i--) {
        result += str[i];
    }
    return newString;
}
解釋

首先我們先創(chuàng)建一個(gè)變量,叫 result,用于保存輸出結(jié)果

然后,從右邊開(kāi)始遍歷字符串。值得注意的是,就像數(shù)組一樣,字符串一樣可以通過(guò)所以來(lái)獲取某一個(gè)字符。比如,str[0] 就是獲取第一個(gè)字符。再比如,str[-1] 就是獲取最后一個(gè)字符

因?yàn)槭菑挠疫呴_(kāi)始遍歷,那我們把每次遍歷到的字符直接加到 result 就可以了

需要注意的是邊界條件的確定,因?yàn)樽址乃饕瑯邮菑?0 開(kāi)始的,因此遍歷的初始值要設(shè)置為 str.length - 1,結(jié)束值為 0

高級(jí)解法

通過(guò)字符串方法以及遞歸來(lái)翻轉(zhuǎn)

function reverseString(str) {
    // 設(shè)置遞歸終點(diǎn)(彈出條件)
    if (!str) {
        return "";
    }
    else {
        // 遞歸調(diào)用
        return reverseString(str.substr(1)) + str.charAt(0);
    }
}
解釋

這種方法,一開(kāi)始不能理解沒(méi)關(guān)系。等做到高級(jí)算法題,再回來(lái)看看應(yīng)該就可以理解了

遞歸涉及到兩個(gè)因素,遞歸調(diào)用以及彈出過(guò)程。reverseString(str.substr(1)) 就是遞歸調(diào)用,+ str.charAt(0) 就是彈出過(guò)程

代碼在執(zhí)行到 reverseString(str.substr(1)) 的時(shí)候,會(huì)重新調(diào)用 reverseString,并傳入 str.substr(1) 作為參數(shù)。后面的 + str.charAt(0) 暫時(shí)不會(huì)執(zhí)行

直到遇見(jiàn)傳入的字符串為 "",因?yàn)橛辛?"" 返回值,就不會(huì)再去調(diào)用 reverseString 了。這時(shí)候,才會(huì)一步一步地執(zhí)行 + str.charAt(0),也就是彈出過(guò)程

舉個(gè)例子:

var str = "abc";

reverseString(str)

執(zhí)行過(guò)程如下:

首先執(zhí)行 reverseString("abc"),這時(shí)候傳入的 str 不為空,所以執(zhí)行 else 部分。讀到了 reverseString(str.substr(1)),這時(shí)候就是遞歸調(diào)用,執(zhí)行這段代碼,其中 str.substr(1) 為 "bc"

reverseString("bc"),這時(shí)候傳入的 str 不為空,所以執(zhí)行 reverseString(str.substr(1)),其中 str.substr(1) 為 "c"

reverseString("c"),這時(shí)候傳入的 str 依舊不為空,所以執(zhí)行 reverseString(str.substr(1)),其中 str.substr(1) 為 ""

reverseString(""),終于,傳入的 str 為空,這時(shí)候返回 ""

回到 reverseString("c") 這一步,剛才的返回值是 "",此時(shí)的 str.charAt(0)"c",那么這一步的返回值是 "c"

回到 reverseString("bc"),剛才的返回值是 "c",此時(shí)的 str.charAt(0)"b",那么這一步的返回值是 "cb"

回到 reverseString("abc"),剛才的返回值是 "cb",此時(shí)的 str.charAt(0)"a",那么這一步的返回值是 "cba"

至此,我們得到了最終結(jié)果,"cba"

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88173.html

相關(guān)文章

  • freeCodeCamp 學(xué)習(xí)記錄——初級(jí)算法「01」翻轉(zhuǎn)符串

    摘要:語(yǔ)法你指定的進(jìn)行拆分的分隔符??梢允且粋€(gè)字符串或正則表達(dá)式,如果分隔符為空字符串,則將原字符串中每個(gè)字符的數(shù)組形式返回。如果元素是或者,則會(huì)轉(zhuǎn)化成空字符串。語(yǔ)法默認(rèn)為分隔符空字符串分隔符剛好是方法的反運(yùn)算。 從這篇開(kāi)始與非將逐篇介紹在初級(jí)算法闖關(guān)中遇到的問(wèn)題和記錄,有疏漏和錯(cuò)誤的地方希望大家可以幫忙指正。這里推薦一個(gè)MDN web docs網(wǎng)站,博客里的方法釋義均來(lái)自此,點(diǎn)擊相應(yīng)位置可...

    gotham 評(píng)論0 收藏0
  • FreeCodeCamp基礎(chǔ)算法答案解析

    摘要:總結(jié)下基礎(chǔ)算法題先把字符串轉(zhuǎn)化成數(shù)組,再借助數(shù)組的方法翻轉(zhuǎn)數(shù)組順序,最后把數(shù)組轉(zhuǎn)化成字符串。檢查一個(gè)字符串是否以指定的字符串結(jié)尾。刪除數(shù)組中的所有假值。加密算法的核心是前個(gè)字母值加,后個(gè)字母值減從字母表重新回滾。 總結(jié)下FreeCodeCamp基礎(chǔ)算法題: Reverse a String 先把字符串轉(zhuǎn)化成數(shù)組,再借助數(shù)組的reverse方法翻轉(zhuǎn)數(shù)組順序,最后把數(shù)組轉(zhuǎn)化成字符串。 fu...

    sihai 評(píng)論0 收藏0
  • W3Cschool——初級(jí)腳本算法

    摘要:方法二提供者沐辰樓姬采用對(duì)象的方法取值優(yōu)化內(nèi)部循環(huán)性能確認(rèn)末尾字符算法挑戰(zhàn)檢查一個(gè)字符串是否以指定的字符串結(jié)尾。方法一方法二提供者沐辰樓姬使用數(shù)組對(duì)象方法,把數(shù)組的第一個(gè)元素從其中刪除,并返回第一個(gè)元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...

    mayaohua 評(píng)論0 收藏0
  • W3Cschool——初級(jí)腳本算法

    摘要:方法二提供者沐辰樓姬采用對(duì)象的方法取值優(yōu)化內(nèi)部循環(huán)性能確認(rèn)末尾字符算法挑戰(zhàn)檢查一個(gè)字符串是否以指定的字符串結(jié)尾。方法一方法二提供者沐辰樓姬使用數(shù)組對(duì)象方法,把數(shù)組的第一個(gè)元素從其中刪除,并返回第一個(gè)元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...

    CntChen 評(píng)論0 收藏0
  • 16道初級(jí)腳本算法,你要挑戰(zhàn)一下嗎?

    摘要:設(shè)置首字母大寫(xiě)算法挑戰(zhàn)返回一個(gè)字符串確保字符串的每個(gè)單詞首字母都大寫(xiě),其余部分小寫(xiě)。確認(rèn)末尾字符算法檢查一個(gè)字符串是否以指定的字符串結(jié)尾。刪除數(shù)組中特定值算法挑戰(zhàn)刪除數(shù)組中的所有的假值。 在w3cschool上看到了這些初級(jí)算法題目,自己先嘗試做了一下,不會(huì)的也會(huì)查看一下別人的借鑒一下思路,更多的幫助自己熟悉字符串和數(shù)組方法的應(yīng)用.如果您有更好的解法,可以指出來(lái)還有中級(jí)算法題目和后面的...

    kumfo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<