如何获得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位数字的最小可能组合的主要内容,如果未能解决你的问题,请参考以下文章