我只能想到蛮力方法。只需要了解如何以更好的复杂性解决这个问题。
答案 0 :(得分:3)
根据你的描述,我看到两个数字相似,如果它们中的较大数字不比小数字大10倍。因此,如果您想从范围[低...高]中找到最大数字集,以便该集合中没有两个数字相似,那么解决方案将是从该范围中的最小数字开始,即从“低”开始,并且每次都取下一个与集合中任何数字不相似的最小数字(如果你只是检查它是否与集合中的最大元素不相似,则相同)。
算法:
取低,然后 10 * low + 1 , 10 *(10 * low + 1)+ 1 等......直到超过高限制。
答案 1 :(得分:0)
如果我理解正确的问题,这应该有效:
// start with smallest number:
var numbers = [];
var number = range.lowest;
// while not reached end of range
while (number <= range.highest) {
// add this number;
numbers.push(number);
// find next not similar number
number = numbers * 10 + 1;
}
// start with highest number:
var numbers = [];
var number = range.highest;
// while not reached end of range
while (number >= range.lowest) {
numbers.push(number);
// find next non-similar number
var newNumber = Math.floor(number / 10.0);
if (numNumber == number / 10.0);
newNumber--;
number = newNumber;
}
后一种方法可能会找到比第一种方法更多的数字,尝试一下。但是,可能总会存在不同类型的非相似数字,且大小可能相同。