特殊密码锁

博客探讨了解决特殊密码锁问题的思路,首先确保左边密码与标准匹配,然后检查右边,若某位不符,则尝试按下其右侧的密码。文章讨论了对一位密码按下和不按下的两种情况处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
本题思路为 首先保证左边的密码状态与标准一致 ,接着看右边 如果有一位 对不上,就按下他右边的密码
有两种情况 :对一位密码 按下和不按下处理很简单 如下操作即可

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值