特殊密码锁

特殊密码锁_第1张图片
本题思路为 首先保证左边的密码状态与标准一致 ,接着看右边 如果有一位 对不上,就按下他右边的密码
有两种情况 :对一位密码 按下和不按下处理很简单 如下操作即可

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;
    }
}

你可能感兴趣的:(复试学习)