基础
数组、字符串、排序、矩阵、模拟、枚举、字符串匹配、桶排序、计数排序、基数排序
数组-两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
字符串-反转字符串
编写一个函数,接收一个字符串作为参数,并返回该字符串的反转版本。例如,输入 "hello",输出 "olleh"
js
// 解1:利用新数组配合倒序循环和join进行处理
const fn = (str) => {
if (!str) return '';
const newStr = []; // 此处也可声明字符串变量,进行拼接 即 let newStr = '';
for(let i = a.length - 1; i >= 0; i--) {
newStr.push(str[i]); // 若使用了字符串变量,则 newStr += str[i];
}
return newStr.join(''); // 若使用了字符串变量,则 return newStr;
}
console.log(fn('hello')); // olleh
js
// 解2: 利用split()分割、数组reverse()反转、join()拼接
const fn = (str) => {
if (!str) return '';
return str.split('').reverse().join('');
}
console.log(fn('hello')); // olleh
js
// 解3:利用递归
const fn = (str) => {
if (!str) return '';
return fn(str.substr(1)) + str.charAt(0);
}
console.log(fn('hello')); // olleh
判断素数
编写一个函数,判断给定的数字是否为素数(只能被 1 和自身整除的数)
js
const fn = (num) => {
if (num <= 1) {
console.log('不是素数1');
return false;
}
for(let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) {
console.log('不是素数2:', `${num}---${i}`);
return false;
}
}
console.log('是素数');
return true;
}
阶乘计算
编写一个函数,接收一个正整数作为参数,并返回该数的阶乘。例如,输入 5,返回 5! = 5 * 4 * 3 * 2 * 1 = 120
js
const fn = (num) => {
// Number.isInteger 判断当前变量是否是整数
if (!Number.isInteger(num) || num < 1 ) {
console.log('请输入一个正整数');
return;
}
let result = 1;
for(let i = 1; i <= num; i++) {
result *= i;
}
return result;
}
fn(5); // 120
数组求和
编写一个函数,接收一个数字数组作为参数,并返回所有元素的总和。
js
// 解1:
const fn = (arr) => {
let sum = 0
for(let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
js
// 解2:数组特性.reduce
const fn = (arr) => {
return arr.reduce((num, sum) => num + sum);
}
最大公约数
编写一个函数,接收两个正整数作为参数,并返回它们的最大公约数(两个数中能够同时整除的最大数)
最大公约数:两个或多个整数中能够同时整除它们的最大正整数。简而言之,最大公约数就是能够整除给定的整数并且同时整除所有这些整数的最大值。
斐波那契数列
编写一个函数,接收一个正整数 n 作为参数,返回斐波那契数列中第 n 个数字的值。斐波那契数列的前两个数字是 0 和 1,后续的数字是由前两个数字相加得到的
概念介绍:
- 定义是:第一和第二个数为1,从第三个数开始,每个数都是前两个数之和。
- F(1) = 1 、 F(2) = 1 、 F(n) = F(n-1) + F(n-2) (n ≥ 3)
- 斐波那契数列的前几个数字依次是:1, 1, 2, 3, 5, 8, 13, 21, 34...
javascript
const fn = (n) => {
if (n <= 0) return '输入无效,请输入大于零的整数';
const arr = [0, 1];
for(let i = 2; i < n; i++) {
let nextNum = arr[i - 1] + arr[i - 2];
arr.push(nextNum);
}
return arr;
}
fn(10); // (10) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]