牛客网刷题15(2道题)

29.把数组排成最小的数

题目链接
https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&&tqId=11185&rp=5&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
题目分析

  1. 自定义排序函数。
  2. 排序函数的写法:
    1)将数组中两个数字(a,b)连成两个新的字符串 (str1=‘ab’,str2=‘ba’);
    2)两个新字符串转化成两个整数(ab,ba);
    3)比较两个整数大小。
function PrintMinNumber(numbers)
{
    var arr = numbers.sort(min).join('');
    return arr;
    function min(a,b){
        str1 = [a,b].join('');
        str2 = [b,a].join('');
        if(parseInt(str1)>parseInt(str2))
            return 1;
        else 
            return -1;
    }
}

30.丑数

题目链接
https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b?tpId=13&&tqId=11186&rp=5&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
题目分析

  1. 除了1以外,剩下的丑数分别是乘2得到的丑数,乘3得到的丑数,乘5得到的丑数。
  2. 取3个数的最小值为本次求出的丑数,这三个数分别是之前求出的丑数乘2得到的丑数、乘3得到的丑数、乘5得到的丑数。
function GetUglyNumber_Solution(index)
{
    if(index == 0){
        return 0;
    }
    var res = [1];
    var x=0;
    var y=0;
    var z=0;
    for(var i=1;i<index;i++){
        res[i] = Math.min(res[x]*2,res[y]*3,res[z]*5);
        if(res[i] == res[x]*2 ) x++;
        if(res[i] == res[y]*3 ) y++;
        if(res[i] == res[z]*5 ) z++;
    }
    return res[index-1];
}
发布了22 篇原创文章 · 获赞 0 · 访问量 362

猜你喜欢

转载自blog.csdn.net/weixin_41796393/article/details/104289761