static void Main(string[] args)
{
Permutate("12345", "", 0);
}
static void Permutate(string str, string result, int length)
{
if (str.Length == length)
{
Console.WriteLine(result);
}
for (int i = 0; i < str.Length; i++)
{
Permutate(str.Remove(i, 1), result + str[i], length);
}
} 请那位解释下, Permutate(str.Remove(i, 1), result + str[i], length);中 比如 str为12345时
执行了str.Remove(i, 1)(此时i=0)后str为2345
接下来执行result + str[i](此时i=0)
此时的str[i]应该为2才对啊,
为什么,编译器此时编译的结果为1啊
大家不信的话可以编译试一下,
请各位高手指点!在下十分困惑!
{
Permutate("12345", "", 0);
}
static void Permutate(string str, string result, int length)
{
if (str.Length == length)
{
Console.WriteLine(result);
}
for (int i = 0; i < str.Length; i++)
{
Permutate(str.Remove(i, 1), result + str[i], length);
}
} 请那位解释下, Permutate(str.Remove(i, 1), result + str[i], length);中 比如 str为12345时
执行了str.Remove(i, 1)(此时i=0)后str为2345
接下来执行result + str[i](此时i=0)
此时的str[i]应该为2才对啊,
为什么,编译器此时编译的结果为1啊
大家不信的话可以编译试一下,
请各位高手指点!在下十分困惑!
解决方案 »
- C# 快捷键有哪些?怎么格式化代码段?
- 用cookie保存textbox的问题
- 字数过多,无法更新
- datagird的数据绑定
- 找不到类型或命名空间名称“SequentialWorkflow
- 如果DataGrid中的数据很多,超出窗体的面积,怎么使鼠标在DataGrid行标题栏上拖动时让选中的行也跟着下移
- 关于一个winForm下的DataGrid问题——高分奖励
- 可以利用我数据库中的一个表,表项为USER和PASSWORD来实现Login登录控件
- 用OleDb连接Access后,在查询时如何写where中的时间格式?
- 哪位高手知道怎样远程访问本地计算机上的C#windows应用程序
- 怎么把外部EXE封装进我的EXE中
- 存储过程的使用
第一次执行Permutate时:
length=0,且lenght!=str.Length.开始执行循环,循环的执行是从0-(str.Length-1)
第一次i==0,调用
Permutate(str.Remove(0,1),result+str[0],length);
第二次i==1,调用
Permutate(str.Remove(1,1),result+str[1],length);
实际上来说,相当于某某一个字符取出来,添加到result当中。这其实是一个用递归方法进行全排列的问题。
执行了str.Remove(i, 1)(此时i=0)后str 仍然为12345
str.Remove(i, 1)返回的是另外的字符串。不信你执行下面的试下。
string s = "12345";
string s1 = s.Remove(0, 1);
Console.WriteLine("s=" + s);
Console.WriteLine("s1=" + s1);