這個 function
接收一個字符串參數,返回翻轉後的字符串blog
好比接收的是 "hello",那麼輸出就是 "olleh"遞歸
先把字符串分割成爲數組get
翻轉數組
把翻轉後的數組合併爲字符串
function reverseString(str) { var strArr = str.split(''); var reversedArr = strArr.reverse(); return reversedArr.join(''); }
第一步就是把傳入的 str
分割,並賦值給 strArr
第二步是把數組翻轉,並賦值給 reversedArr
第三步是返回合併以後的字符
須要注意的是,以上的 .split
和 .join
都不會改變原來的字符串或數組,但 reverse
會改變原來的數組
function reverseString(str) { return str.split('').reverse().join(''); }
.split
返回分割後的數組,所以能夠直接調用 .reverse
.reverse()
方法返回的是翻轉後的數組,所以能夠直接調用 .join
.join
以後就是咱們想要的字符串,直接返回便可
這裏用到了 Method Chaining,也就是方法的鏈式調用。只要你熟悉方法的返回值,就能夠這麼作,好處在於能夠不用建立這麼多變量
直接利用字符串方法,而不須要轉換成數組
function reverseString(str) { var result = ""; for (var i = str.length - 1; i >= 0; i--) { result += str[i]; } return newString; }
首先咱們先建立一個變量,叫 result
,用於保存輸出結果
而後,從右邊開始遍歷字符串。值得注意的是,就像數組同樣,字符串同樣能夠經過因此來獲取某一個字符。好比,str[0]
就是獲取第一個字符。再好比,str[-1]
就是獲取最後一個字符
由於是從右邊開始遍歷,那咱們把每次遍歷到的字符直接加到 result
就能夠了
須要注意的是邊界條件的肯定,由於字符串的索引一樣是從 0 開始的,所以遍歷的初始值要設置爲 str.length - 1
,結束值爲 0
經過字符串方法以及遞歸來翻轉
function reverseString(str) { // 設置遞歸終點(彈出條件) if (!str) { return ""; } else { // 遞歸調用 return reverseString(str.substr(1)) + str.charAt(0); } }
這種方法,一開始不能理解不要緊。等作到高級算法題,再回來看看應該就能夠理解了
遞歸涉及到兩個因素,遞歸調用以及彈出過程。reverseString(str.substr(1))
就是遞歸調用,+ str.charAt(0)
就是彈出過程
代碼在執行到 reverseString(str.substr(1))
的時候,會從新調用 reverseString
,並傳入 str.substr(1)
做爲參數。後面的 + str.charAt(0)
暫時不會執行
直到碰見傳入的字符串爲 ""
,由於有了 ""
返回值,就不會再去調用 reverseString
了。這時候,纔會一步一步地執行 + str.charAt(0)
,也就是彈出過程
舉個例子:
var str = "abc"; reverseString(str)
執行過程以下:
首先執行 reverseString("abc"),這時候傳入的 str
不爲空,因此執行 else
部分。讀到了 reverseString(str.substr(1))
,這時候就是遞歸調用,執行這段代碼,其中 str.substr(1)
爲 "bc"
reverseString("bc")
,這時候傳入的 str
不爲空,因此執行 reverseString(str.substr(1))
,其中 str.substr(1)
爲 "c"
reverseString("c")
,這時候傳入的 str
依舊不爲空,因此執行 reverseString(str.substr(1))
,其中 str.substr(1)
爲 ""
reverseString("")
,終於,傳入的 str
爲空,這時候返回 ""
回到 reverseString("c")
這一步,剛纔的返回值是 "",此時的 str.charAt(0)
爲 "c"
,那麼這一步的返回值是 "c"
回到 reverseString("bc")
,剛纔的返回值是 "c",此時的 str.charAt(0)
爲 "b"
,那麼這一步的返回值是 "cb"
回到 reverseString("abc")
,剛纔的返回值是 "cb",此時的 str.charAt(0)
爲 "a"
,那麼這一步的返回值是 "cba"
至此,咱們獲得了最終結果,"cba"