本题思路为 首先保证左边的密码状态与标准一致 ,接着看右边 如果有一位 对不上,就按下他右边的密码
有两种情况 :对一位密码 按下和不按下处理很简单 如下操作即可
class Solution {
public boolean isHappy(int n) {
int s1[] = {0,1,1};
int temp[] = {0,1,1};
int s2[]={0,0,0};
boolean flag1 = true;
boolean flag2=true;
int num_2=0;
int num_1 =1;
//第一位 修改
change(0,s1);
change(1,s1);
for(int i=1 ;i<s1.length-1;i++){
if(s1[i]!= s2[i]){
change(i,s1);
change(i+1,s1);
if(i+2<s1.length){
change(i+2,s1);
}
num_1++;
}
}
if(! Arrays.equals(s1, s2)){
flag1=false;
}
// 第二种情况 不按第一位
for(int i=0 ; i< s2.length-1;i++){
if(temp[i] != s2[i]){
change(i,temp);
change(i+1,temp);
if(i+2<s2.length){
change(i+2,temp);
}
num_2++;
}
}
if(! Arrays.equals(temp, s2)){
flag2=false;
}
if(flag1){
System.out.println(" 1 符合 "+ flag1+" num wei "+ num_1);
}
if(flag2){
System.out.println(" 2 符合 "+ flag2+" num 为"+ num_2);
}
if(flag1 && flag2 ){
System.out.println(" 都符合 : "+ Math.min(num_1,num_2)) ;
}
return true;
}
public int [] change (int i,int []s){
if(s[i]==0){
s[i]=1;
}
else {s[i]=0;}
return s;
}
}