获得数河内
问题描述:
鉴于这种方法的塔移动,获得数河内
public static String solve(int n, String start, String middle, String end)
我想返回的动作的次数。我可以在某种程度上与此代码获得此:
public static String solve(int n, String start, String middle, String end) {
if (n == 1) {
return Integer.toString(1);
}
return solve(n - 1, start, end, middle) + solve(n - 1, middle, start, end) + 1;
}
但是当我给1个磁盘的回答为1,当我2磁盘的回答为111,当我得到3-磁盘回答为1111111,4是111111111111111 , 等等。每个字符串中的1的数字代表一个移动,但我不想要1,我想要1,3,7,15等等。我如何改变这段代码让我得到后面的数字?
答
三种可能的解决方案:
- 变化
solve
返回INT;改变第一return
到return 1;
- 离开
solve
独自一人,但捕捉变量s
产生的String
和打印s.length()
,而不是s
本身; - 扔掉
solve
,只是用公式Math.pow(2, n) - 1;
+0
我不知道如何实现第二种方法。我试过了,它不会改变任何东西 – kprog
+0
'Sting s = solve(5,“”,“”,“”);的System.out.println(s.length());' –
如果你想要的结果设置为*号的移动*,为什么是返回类型的'String'? 'int'不会更好吗? - 既然你不用'start','middle'和'end'来做什么,为什么他们在那里? – Andreas