试图解决这个Codewars 挑战。
您有一个由数字组成的正数 n。您最多可以执行一个操作:选择数字中某个数字的索引,在该索引处删除该数字并将其插入到另一个或数字中的同一位置,以便找到您可以获得的最小数字。
任务:根据语言返回数组或元组或字符串(请参阅“示例测试”):
1)你得到的最小数字
2)你取的数字d的索引i,i越小越好
3) 插入这个数字 d 以获得最小数字的索引 j(尽可能小)。
例子:
smallest(261235) --> [126235, 2, 0] or (126235, 2, 0) or "126235, 2, 0"
其他例子:
209917, [29917, 0, 1]
285365, [238565, 3, 1]
269045, [26945, 3, 0]
296837, [239687, 4, 1]
因此,为了获得尽可能小的数字,我们需要从数字中删除最小的数字并将其放在数字的前面,对吗?
function smallest (n) {
//turn n into an array
let array = String(n).split("").map(Number);
let smallest = Math.min(...array);
//find index of smallest in original array
let index = array.indexOf(smallest);
//remove smallest from original array, move it to front
array.splice(index, 1);
array.unshift(smallest);
let newNumber = Number(array.join(""));
//return array of new number, index of where the smallest was,
//and index of where the smallest is now
return ([newNumber, index, 0]);
}
console.log(smallest(239687));
我的答案是返回正确的数字,但是,大约有一半的时间,它没有返回正确的 indexi
和 index j
。
一只萌萌小番薯
慕斯王
相关分类