除一个数字之外的某个范围内的随机整数

P. *_*ank 10 javascript random

我想在一个范围内得到一个随机数,不包括一个数字(例如从1到1000不包括577).我搜索了一个解决方案,但从未解决过我的问题.

我想要的东西:

Math.floor((Math.random() * 1000) + 1).exclude(577);
Run Code Online (Sandbox Code Playgroud)

我想避免for循环创建一个尽可能多的数组,因为长度总是不同的(有时1到10000,有时是685到888555444等),生成它的过程可能需要太多时间.

我已经尝试过:

我怎么能实现这个目标?

Mar*_*lli 22

获取某个范围内的随机整数[a, b](不包括一个值)的最快方法c是在a和之间生成它b-1,然后如果它高于或等于,则将其递增1 c.

这是一个工作功能:

function randomExcluded(min, max, excluded) {
    var n = Math.floor(Math.random() * (max-min) + min);
    if (n >= excluded) n++;
    return n;
}
Run Code Online (Sandbox Code Playgroud)

该解决方案仅具有O(1)的复杂性.

  • @ P.Frank这就是诀窍!例如假设您希望它从1到10,但不是5.您从1到9生成它,然后,如果它高于或等于5,则添加1.执行此操作您只能获得[1,2, 3,4,6,7,8,9,10],这就是你想要的.所有数字都具有相同的生成概率,并且永远不会生成5. (3认同)
  • **显然这是正确的答案.令人难以置信的是,在专业的编程网站上,任何人都提出了其他建议.真是笑话.** (3认同)

小智 5

一种可能性是不加 1,如果该数字出现,则分配最后一个可能的值。

例如:

var result = Math.floor((Math.random() * 100000));
if(result==577) result = 100000;
Run Code Online (Sandbox Code Playgroud)

这样,您就不需要重新启动随机方法,而是重复执行。并满足随机的目标。