我想在一个范围内得到一个随机数,不包括一个数字(例如从1到1000不包括577).我搜索了一个解决方案,但从未解决过我的问题.
我想要的东西:
Math.floor((Math.random() * 1000) + 1).exclude(577);
我想避免for
循环创建一个尽可能多的数组,因为长度总是不同的(有时1到10000,有时是685到888555444等),生成它的过程可能需要太多时间.
我已经尝试过:
Javascript - 生成范围中的随机数,不包括某些数字
如何在一个范围内生成一个随机数但排除一些?
我怎么能实现这个目标?
获取某个范围内的随机整数[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; }
该解决方案仅具有O(1)的复杂性.