557. 反转字符串中的单词 III

1. 暴力解法

  1. var reverseWords = function(s) {
  2. return s.split(" ").map(item => item.split("").reverse().join("")).join(" ");
  3. };

直接调用原生的 api 来解决。

解题思路:

  • 先将字符串按照空格进行拆分,得到一个新数组 ["Let's", "take", "LeetCode", "contest"]
  • 再对每一项进行反转,在反转过程中,需要将其转为 Array 类型,最后将结果拼接为一个字符串即可;

2. 双指针

  1. /**
  2. 示例:
  3. 输入:"abcde" 1 3
  4. 输出:adcbe
  5. 注解:将字符串的第1位到第3位进行反转
  6. 类似于 344. 反转字符串
  7. */
  8. var reverseString = function (s) {
  9. let left = 0,
  10. len = s.length,
  11. right = len - 1,
  12. newArr = new Array(len);
  13. while (left <= right) {
  14. newArr[left] = s[right]
  15. newArr[right] = s[left]
  16. left++;
  17. right--;
  18. }
  19. return newArr.join("");
  20. };
  21. /**
  22. * @param {string} s
  23. * @return {string}
  24. */
  25. var reverseWords = function (s) {
  26. return s.split(" ").map(item => reverseString(item)).join(" ");
  27. };

由于 JavaScript 中 String 是不可变的,所以这里就换成了 Array 来替代一下,实现原理上和 344. 反转字符串 都是一样的。

split 就直接拿来用了,不再手写了。。。

509. 斐波那契数

方法1 - 递归

  1. var fib = function (n) {
  2. if (n === 0) return 0;
  3. if (n === 1 || n === 2) return 1;
  4. return fib(n - 1) + fib(n - 2);
  5. };

注解

501~600 - 图1