Я пытаюсь написать функцию, которая принимает положительное целое число и возвращает следующее меньшее положительное целое число, содержащее одни и те же цифры, и -1, когда не существует меньшего числа, содержащего одни и те же цифры.Как оптимизировать мою функцию, которая принимает положительное целое число и возвращает следующее меньшее положительное целое число?
For example:
nextSmaller(21) == 12
nextSmaller(531) == 513
nextSmaller(2071) == 2017
Я написал код, который решает это, но я действительно не знаю, как его оптимизировать. Не могли бы вы мне помочь? Он работает довольно быстро на repl.it, но когда я его отправляю, он говорит, что он занимает более 1200 мс и не позволяет мне отправлять его, даже если все тесты проходят.
function nextSmaller(n) {
var nArray= n.toString().split("")
var minimumNum = 1 + Array(nArray.length).join('0')
for(var i=n-1; i >= minimumNum; i--) {
var newNumArray = i.toString().split('');
var counter = 0;
for (var j=0; j<newNumArray.length; j++) {
if (nArray.indexOf(newNumArray[j]) > -1) {
counter++
nArray.splice(nArray.indexOf(newNumArray[j]), 1)
if (counter === n.toString().split("").length) {
return i;
}
}
}
nArray = n.toString().split("");
if (i === Number(minimumNum)) return -1;
}
}
Возможно, это больше подходит в [обзоре кода] (http://codereview.stackexchange.com/) –
Посмотрите на модели, чтобы локализовать проблему пространства , Например, вы должны только проверять перестановки цифр на входе. – 4castle
Похоже, это ката на копейках – JohanP