基础编程题JS解法(一)
原作者(还是那个zpp)
原文链接
- 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
function GetUglyNumber_Solution(index){if (index === 0) return 0;var uglyNum = [1];var factor2 = 0,factor3 = 0,factor5 = 0;for (var i = 1; i < index; i++) {uglyNum[i] = Math.min(uglyNum[factor2] * 2, uglyNum[factor3] * 3, uglyNum[factor5] * 5);if (uglyNum[i] === uglyNum[factor2] * 2) factor2++;if (uglyNum[i] === uglyNum[factor3] * 3) factor3++;if (uglyNum[i] === uglyNum[factor5] * 5) factor5++;}return uglyNum[index - 1];}
2.给一个8元素数组例如1 3 0 3 6 0 0 9将所有0放后面,其他数字顺序不变,结果为1 3 3 6 9 0 0 0
var a = [1, 0, 3, 0, 3, 2, 6, 9, 0];var res = [];var count = 0;for(var i=0; i < a.length; i++){if(a[i]==0){count++;}else {res.push(a[i]);}}for(var i=0; i < count; i++){res.push(0);}console.log(res);
3.判断两个字符串是否是异位,比如abcn 和 banc是一对,anc和nac是一对,其实就是判断奇偶交换。
var str1 = \'abc\';var str2 = \'bax\';function changePosition(a, b) {var arr1 = a.split(\'\');var arr2 = b.split(\'\');var length1 = arr1.length;var length2 = arr2.length;var i, j;if (arr1 == null && arr2 == null) {return true;}if (length1 < 1 || length2 < 1 || (length1 != length2)) {return false;}for (i = 0, j = 1; i < length1, j < length2;) {if(length1 % 2 == 0){ //长度为偶数if (i == length1 - 1 && arr1[i] != arr2[i]) {return false;}if (arr1[i] != arr2[i + 1] || arr1[j] != arr2[j - 1]) {return false;}}else{ //长度为奇数if(arr1[length1-1] != arr2[length2-1]){return false;}else{if (arr1[i] != arr2[i + 1] || arr1[j] != arr2[j - 1]) {return false;}}}i = i + 2;j = j + 2;}return true;}var res = changePosition(str1,str2);console.log(res);
4.找一个五位数,乘9等于逆序后的数。
for (var i = 10000; i <= 11111; i++) {if (i * 9 == reverseNum(i)) {console.log(i);}}function reverseNum(n){var str = n.toString();var arr = str.split(\'\');var res = parseInt(arr.reverse().join(\'\'));return res;}
5.找出数组 arr 中重复出现过的元素。
输入
[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出
[1, 3, 4]
function duplicates(arr) {var a=arr.sort(),b=[]; //b数组存放输出的结果for(var i in a){if(a[i]==a[i-1] && b.indexOf(a[i])==-1) //判断重复元素b.push(a[i]);}return b;}
6.在数组 arr 中,查找值与 item 相等的元素出现的所有位置。 输入 ‘abcdefabc’, ‘a’ 输出 [0, 6]
function findAllOccurrences(arr, target) {var a = [];arr.forEach(function(val,index){val !== target || a.push(index);});return a;}
7.给定字符串 str,检查其是否包含 连续3个数字 1、如果包含,返回最新出现的 3 个数字的字符串 2、如果不包含,返回 false 输入 ‘9876543’ 输出 987
function captureThreeNumbers(str) {var t = str.match(/\\d{3}/);if(t){return t[0]; //返回匹配项}else{return false;}}
8.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。(剑指offer)
function FindNumbersWithSum(array, sum){if(array.length < 2)return [];var start = 0,end = array.length-1;while(start < end){if(array[start]+array[end] < sum){start++;}else if(array[start]+array[end] > sum){end--;}else{return [array[start],array[end]];}}return [];}
喜欢本文请支持原作者,感谢!