【发布时间】:2013-03-06 09:20:08
【问题描述】:
如果 a
我只能想到蛮力方法。只需要知道如何以更复杂的方式解决这个问题。
【问题讨论】:
-
你能更正/改写你的帖子并注意你的语法吗?真的很难理解你的意思。
-
@marsze 问题已明确说明.. 你有什么不清楚的地方
-
我不明白这句话“返回一个集合,包含给定范围内最大数量的非相似数字”你能详细说明或举例吗?
如果 a
我只能想到蛮力方法。只需要知道如何以更复杂的方式解决这个问题。
【问题讨论】:
从您的描述中,我看到如果两个数字中较大的数字不超过小数字的 10 倍,则它们是相似的。因此,如果您想从范围 [low...high] 中找到最大的数字集,以便该集中没有两个数字相似,则解决方案将是从范围中的最小数字开始,即从“low”开始,并且每次取下一个与集合中任何数字都不相似的最小数字(或者如果您只是检查它是否与集合中的最大元素不相似,则它相同)。
算法:
取low,然后10 * low + 1,10 * (10 * low + 1) + 1,等等...直到超过高限制。
【讨论】:
如果我正确理解了问题,这应该可以:
// 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;
}
后一种方法可能会比第一种方法找到更多的数字,试试吧。但是,可能总会有大小相同的不同的不相似数集。
【讨论】: