其实用递归思路并不如用双循环清晰,但两者执行原理是一样的。建议楼主同学能用循环尽量用循环。
下面给出双循环和递归的解法:
双循环:
int[] arr={0,1,2,3,4,5,6,7,8,9};
List<string> list = new List<string>();
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr.Length; j++)
{
if (list.Contains(arr[i] + "" + arr[j]) || list.Contains(arr[j] + "" + arr[i]))
{
continue;
}
else
{
list.Add(arr[i] + "" + arr[j]);
}
}
}
Console.Write(string.Join(",", list));
Console.ReadKey();
下面是递归解法:
static void Main(string[] args)
{
int[] arr={0,1,2,3,4,5,6,7,8,9};
List<string> list = new List<string>();
getList(0,0,arr,list);//递归方法
Console.Write(string.Join(",", list));
Console.ReadKey();
}
public static void getList(int i,int j,int[] arr,List<string> strs) {
if(i==arr.Length)
{
//递归结束条件
return;
}
if (j == arr.Length)
{
j = 0;
getList(i+1,j,arr,strs);
}
else {
if (strs.Contains(arr[i] + "" + arr[j]) || strs.Contains(arr[j] + "" + arr[i]))
{
//如果已经有这种组合,则什么都不做
}
else
{ //如果不包含这种组合,则将这种组合加入集合中
strs.Add(arr[i] + "" + arr[j]);
}
getList(i, j + 1, arr, strs);
}
}
|