- 把只包含质因子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];
}
- 给一个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);
- 判断两个字符串是否是异位,比如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);
- 找一个五位数,乘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;
}
- 找出数组 arr 中重复出现过的元素。
输入
[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出
[1, 3, 4]
function duplicates(arr) {
var a=arr.sort(),b=[];
for(var i in a){
if(a[i]==a[i-1] && b.indexOf(a[i])==-1)
b.push(a[i]);
}
return b;
}
- 在数组 arr 中,查找值与 item 相等的元素出现的所有位置。
输入
‘abcdefabc’, ‘a’
输出
[0, 6]
function findAllOccurrences(arr, target) {
var a = [];
arr.forEach(function(val,index){
val !== target || a.push(index);
});
return a;
}
- 给定字符串 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;
}
}
- 输入一个递增排序的数组和一个数字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 [];
}