java – 数组递归
|
我有一个我无法弄清楚的任务,任何指针都会非常感激,它是这样的:
有一系列的灯泡表示为真/假的数组,每个灯泡都有一个开关,通过点击任何灯泡,你可以切换它和2个相邻的灯泡(左边1个,右边1个) ;如果点击开关的灯泡在边缘 – 当然只有1个相邻切换). 需要完成的是一种方法,它接受一系列打开/关闭灯泡的阵列,另一个方法表示在点击某些开关之后所谓的第一阵列的另一种状态. 这是方法的签名: public static boolean disco(boolean[] init,boolean[] target) 如果array init可以转换为target,则返回true,否则返回false. 例: boolean[] init = {true,false,true,false};
boolean[] target = {false,true};
对于2个以上的数组,disco(init,target)将返回true,因为切换第1个和第4个灯泡会产??生目标状态(请记住相邻的灯泡也会被切换). 解决方法
新版本
public static boolean disco(boolean[] init,boolean[] target)
{
return recurse(init,boolean,0);
}
public static boolean recurse(boolean[] init,boolean[] target,int min)
{
if (min == init.length)
if (init == target)
return true;
else
return false;
boolean[] temp = "init with a change at min";
boolean a = recurse(init,target,min+1);
boolean b = recurse(temp,min+1);
return a||b;
}
新版本 我把它分解为三种情况: 案例1:长度%3 = 0 案例2:长度%3 = 1 案例3:长度%3 = 2 public static boolean disco(boolean[] init,boolean[] target)
{
if (init.length%3 == 0 || init.length%3 == 1)
return true;
return recurse(init,true);
}
public static boolean recurse(boolean[] init,int index,boolean even)
{
if (index = init.length)
return even;
if (init[index] != target[index] && index%3 != 0)
even = !even;
return recurse(init,index+1,even);
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
