小编Abd*_*air的帖子

如何优化我的函数,它取一个正整数并返回下一个较小的正整数?

我正在尝试编写一个函数,它接受一个正整数并返回包含相同数字的下一个较小的正整数,并且当没有包含相同数字的较小数字时返回-1.

For example:

nextSmaller(21) == 12
nextSmaller(531) == 513
nextSmaller(2071) == 2017
Run Code Online (Sandbox Code Playgroud)

我写了一个解决这个问题的代码,但我真的不知道如何进一步优化它.请你帮助我好吗?它在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;
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript string algorithm math numbers

5
推荐指数
2
解决办法
650
查看次数

标签 统计

algorithm ×1

javascript ×1

math ×1

numbers ×1

string ×1