使用javascript生成n个长度的唯一随机数

时间:2015-08-14 07:45:50

标签: javascript random

以下是规则:

  

生成长度为N的随机数。

     

一个数字中不超过两个连续数字应该相同。

我编写了代码,但即使允许一个数字中有两个相同的连续数字,它也无效。生成所有唯一的随机数。

我保留一个临时变量,它存储生成的前一个数字,如果它与当前的生成数匹配,则丢弃并再次生成。

while (rnum.length<=7)
{
    gennum = randomNumericChar();
    if(rnum.length==0) {
        rnum = rnum.concat(gennum);
        prevnum = gennum;
    } else if(gennum!=prevnum) {            
        rnum = rnum.concat(gennum);
        prevnum = gennum;
    }
}

return rnum;

FOund解决方案:

Hi, i got the solution.                                                                                        ` var rnum = "" ;
var random;

while(rnum.length<=7)
{
    random= generaterandom();

    if(rnum.length<2)
    {
      rnum = rnum.concat(random);

    }else
    {
      //check whether previous two numbers are same, if not then append generated random number
      if(!(random==rnum.charAt(rnum.length-1) &&  random==rnum.charAt(rnum.length-2)))
      { 
        rnum = rnum.concat(random);        
      } 

    }                   
}`

1 个答案:

答案 0 :(得分:1)

这可能是您的解决方案:

function randomNumericChar(lastNumber) {
    var num = Math.floor((Math.random() * 10) + 1);

    if (lastNumber !== null && num === lastNumber) {
        return randomNumericChar(lastNumber);
    } else {
        return num;
    }
}

function createNumber(n) {
    var randomNumber = '';
    var lastChar     = null;

    while (randomNumber.length < n) {
        var num = randomNumericChar(lastChar);

        if (((randomNumber.length + 1) % 2) === 1) {
            lastChar = num;
        }

        randomNumber += num;
    }

    return randomNumber;
}

var randomNumber = createNumber(10);

编辑:忘记了可能有1个连续号码的事实。