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)将数组中两个数字(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以外,剩下的丑数分别是乘2得到的丑数,乘3得到的丑数,乘5得到的丑数。
- 取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];
}