关于javascript:FreeCodeCampJavaScript初级算法题1

31次阅读

共计 2289 个字符,预计需要花费 6 分钟才能阅读完成。

1、将摄氏度转换为华氏度
将摄氏度转换为华氏度的计算形式为:摄氏度乘以 9/5 而后加上 32
输出:convertToF(0) 应返回一个数字
输出:-30
输入:-22
其中 celsius 代表摄氏度,fahrenheit 代表华氏度
解法:

function convertToF(celsius) {
  let fahrenheit;
  fahrenheit = (celsius*9/5)+32
  return fahrenheit;
}

思路:这题很简略,间接依照公式套就能够了。

2、反转字符串
反转传入函数的字符串,函数的返回后果也应为字符串
解法:

function reverseString(str) {let temp = str.split('');
  temp = temp.reverse().join('');
  return temp;
}
reverseString("hello");

思路:看到此题首先想到 js 里的反转数组的办法,reverse(),
① 把字符串转为数组,用 split 办法;
② 应用数组的 reverse 办法将数组元素反转
③ 应用 join 办法把数组转为字符串(题目要求要返回字符串
知识点:split,join,reverse。

3、计算整数的阶乘
返回一个给定整数的阶乘计算结果,对于整数 n,n 的阶乘就是所有小于等于 n 的正整数的乘积。
阶乘通常用符号 n! 来示意。
例如:5! = 1 2 3 4 5 = 120

解法一:function factorialize(num) {
  let product = 1;
  for (let i = 2; i <= num; i++) {product *= i;}
  return product;
}

思路:理解阶乘是怎么回事当前就好办了,就是从 1 乘到 num,那么就初始一个遍历为 1,循环从 2 开始到 num 完结,顺次相乘即可。
解法二:

function factorialize(num) {if (num === 0) {return 1;}
  return num * factorialize(num - 1);
}

思路:使用递归的思维,顺次调用函数,直到 num=1,
解法三:

function factorialize(num) {
  return num < 0 ? 1 :
    new Array(num)
      .fill(undefined)
      .reduce((product, _, index) => product * (index + 1), 1);
}

思路:
本解法用到了三目运算符和两个办法(fill 和 reduce),其中 fill 是填充数组的意思,reduce 语法:
arr.reduce(function(prev,cur,index,arr){

}, init);
其中,
arr 示意原数组;
prev 示意上一次调用回调时的返回值,或者初始值 init;
cur 示意以后正在解决的数组元素;
index 示意以后正在解决的数组元素的索引,若提供 init 值,则索引为 0,否则索引为 1;
init 示意初始值。

4、找出字符串中的最长单词
返回给出的句子中,最长单词的长度。
函数的返回值应是一个数字。
输出:findLongestWordLength(“The quick brown fox jumped over the lazy dog”)
输入:6
输出:findLongestWordLength(“What if we try a super-long word such as otorhinolaryngology”)
输入:19
解法一:

function findLongestWordLength(str) {let arr = str.split(' ');
  let len = [];
  for(let i =0;i<arr.length;i++){len.push(arr[i].length);
  }
   let MaxLen = Math.max(...len);

  return MaxLen;
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");

思路:
①把字符串拆分为数组,以空格为分隔符;
②新建一个数组
④ 遍历数组,把每个单词的长度寄存到新数组里
⑤ 最初再比拟数组里的数字最大的是多少

知识点:
① 数组和字符串相互转换的办法:split,join
② 计算一组参数的最大值,Math.max(参数),数组的话要写成 Math.max(…数组名)的模式

解法二:

function findLongestWordLength(str) {
  let maxLen = 0;
  let arr = [];
  let right = 0,left = 0;
  for(let i =0;i<str.length;i++){if(str[i] == ' ') {
      right = i-left;
      left = i+1;
      arr.push(right)
    }
    if(i==str.length-1 && str[left-1] ==' '){
      right = str.length-left;
      arr.push(right)
    }
  }
  maxLen = Math.max(...arr);
  return maxLen;
}

思路:滑动窗口思维
① 创立 left,right 两个索引,maxLen 负责记录长度,新数组 arr
②遍历字符串,如果遇到空格,就断定为一个单词,用 right 记录此单词大小,并把长度放数组里。
③这个算法要思考一种状况,因为最初一个单词开端是没有空格的,所以第二个 if 来了,若遍历到最初一个字符时,且 left- 1 的所引出为空格,则示意为一个单词,计算大小,放进数组
③ 比拟新数组里的数字大小,最大的则是最长单词的长度

知识点:
① 滑动窗口思维
②计算一组参数的最大值,Math.max(参数),数组的话要写成 Math.max(…数组名) 的模式
先暂且记录到这里。

正文完
 0