- 判斷一個數是否素數
一個素n不是素數一定是兩個因數相乘,一個大於根號n,一個小於根號n。
function isPrime(num) {
var val = num / 1;
var bflag = true;
for (let i = 2; i < Math.ceil(Math.sqrt(val)); i++) {
let a = val / i;
if (a % i == 0) {
bflag = false;
break;
}
}
return bflag;
}
- 求斐波那契數列第n項
斐波那契數列的遞推式:a(n+1) = a(n) + a(n -1) , 其中a1 = a2 =1。
function fibonacci(n) {
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
- 求兩個整數的最大公約數
function greatestCommonDivisor(x, y) {
var max = Math.max(x, y);
var res = 0;
for (let i = 1; i < max; i ++) {
if (x % i == 0 && y % i == 0) {
res = i;
};
};
return res;
}
- 數組去重
數組去重有太多的方法,我慢慢收集一點
(1) 利用對象屬性不重複性。時間複雜度O(n)
function distinct(arr) {
var obj = {};
var resArr = [];
for (var i = 0; i < arr.length; i++) {
var attr = arr[i];
if (!obj.hasOwnProperty(attr)) {
obj[attr] = attr;
resArr.push(attr);
}
}
return resArr;
}
(2) 利用數組檢查的方式。
function distinct(arr) {
var resArr = [];
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
if (!resArr.includes(item)) {
resArr.push(item);
}
}
return resArr;
}
(3) 利用Set類型。(好吧,看起來有點簡潔)。
function distinct(arr) {
return Array.from(new Set(arr));
}
- 刪除重複的字符串
此題和數組去重類似了。轉換爲數組和上面代碼一致了。
function distinctStr(str) {
var arr = str.split('');
return distinct(arr).join('');
}
- 給已經排序好的數組合並且排序
例如:[1,3,5]和[2,4,6]變成[1,2,3,4,5,6]。
思路:用i和j兩個指向,一直往後挪,如果後面那個數組沒有了,就把第一個剩餘數組全部梭哈了。
function mergeSortedArr(arr1, arr2) {
var ele1 = arr1[0];
var ele2 = arr2[0];
var i = 0;
var j = 0;
var res = [];
while(ele1 || ele2) {
if ((ele1 && !ele2) || (ele1 <= ele2)) {
res.push(ele1);
ele1 = arr1[++i];
} else {
res.push(ele2);
ele2 = arr2[++j];
}
}
return res;
}
- 字符串反轉
此題不是考數組的reverse方法,而是考循環。
function reverse(str) {
var res = '';
for(var i = str.length - 1; i >= 0; i--) {
res += str[i];
}
return res;
}
- 單詞反轉
例如:I like you 變成 I ekil uoy
下面方法,請細細品味。
function reverseInPlace(str) {
return str.split(' ').reverse().join(' ').split('').reverse().join('')
}