构造一个8位数字,该数字的每一位都不重复???
像这种题目最土鳖的做法就是Random一个随机数字判断是否与之前的数字重复,如果重复则重新随机,其实想了想这种方法实在效率不高真的。
但是针对这个题目可以有一个比较好理解的做法虽然效率也是个问题。
public static int Method1()
{
List<string> nums = new List<string>() { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };//用字符串好处理
Random rd = new Random();
string num = "";
for (int i = 0; i < 8; i++)//生成8位数字
{
int index = rd.Next(0, nums.Count);//随机一个index,从nums数组中,0开头的暂时就不处理了无非多个判断
num += nums[index];
nums.Remove(nums[index]);
}
return int.Parse(num);
}
还有就是利用Hashtable来产生数字,随机生成0到9的数字利用HS的快速性进行循环查找遍历,然后找出之前没有的进行组合。
public static int Method2()
{
Hashtable hashtable = new Hashtable();
Random random = new Random();
string num = "";
for (int i = 0; hashtable.Count < 8; i++)//随机产生8位数字
{
int nValue = random.Next(10);//在0,9中随机一个数字
if (!hashtable.ContainsValue(nValue))//判断之前是否有数字,0开头的暂时就不处理了无非多个判断
{
hashtable.Add(nValue, nValue);
num += nValue.ToString();
}
}
return int.Parse(num);
}
我看网上也有用DateTime.Now.Ticks大体看过感觉也是一般,不知道还有什么好的方法呢