基础编程题JS解法(一)

基础编程题JS解法(一)

原作者(还是那个zpp)
原文链接

  1. 把只包含质因子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 []; 
}



喜欢本文请支持原作者,感谢!

你可能感兴趣的:(JS,前端)