如何获得4位数字的最小可能组合

Posted

技术标签:

【中文标题】如何获得4位数字的最小可能组合【英文标题】:How to get minimal possible combination of 4 digit number 【发布时间】:2021-05-08 01:10:57 【问题描述】:

我有 4 位整数。我必须得到最小的数字,它是那些原始数字的组合(不能以零开头)

function changeDigitsOrder(num)
 return Number(num.toString().split('').sort().join(''))

它适用于没有 0 的数字,但我怎样才能从 1500 得到 1005

【问题讨论】:

所以你需要抽出零并将其附加在最小的非零之后 是的,至少应该是1000 @epascarello 是的。 3070 => 3007、7740 => 4077 【参考方案1】:

我玩过解构和lookbehind

const re = /(00,)+([1-9]0,)+/g;
const smallest = num => 
  let str = num.toString().split('').sort().join('')
  let [parts] = str.matchAll(re)
  let [_, zeroes, other] = parts
  return +(other.replace(/(?<=^.1)/, zeroes))
;

console.log(smallest(1500))
console.log(smallest(1245))
console.log(smallest(5421))
console.log(smallest(421))

【讨论】:

【参考方案2】:

您可以切换零和以下值。

function changeDigitsOrder(num) 
    return +num
        .toString()
        .split('')
        .sort((a, b) => a - b)
        .join('')
        .replace(/(0+)(.)/, '$2$1');


console.log(changeDigitsOrder(1500)); // 1005
console.log(changeDigitsOrder(321));  //  123

【讨论】:

谢谢,能否请您简单解释一下什么是 .replace(/(0+)(.)/, '$2$1');有吗? 它搜索零和非零跟随字符,并以不同的顺序获取这两个组。

以上是关于如何获得4位数字的最小可能组合的主要内容,如果未能解决你的问题,请参考以下文章

密码6到16位数字和字母组合

2017.12.27 算法分析 贪心算法删除数字求最小值问题

js产生一个随机的字符串数字组合

算法导论----贪心算法,删除k个数,使剩下的数字最小

手机号和短信验证码大全4位数是多少

由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数