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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |