题解 | #数独#

开锁

http://www.nowcoder.com/practice/e7cbabbf7e0a41ec98055ee5f3d33bbe

  1. 使用广度优先算法:
 Queue<String> queue = new LinkedList<>();
        queue.offer("0000");
        while(!queue.isEmpty()){
            int size = queue.size();
            for(int i=0;i<size;i++){
                String content = queue.poll();
                for(int j=0;j<4;j++){
                    String plus = plusOne(content,j);
                    queue.offer(plus);
                    String minus =minusOne(content,j);
                    queue.offer(minus);
                }
            }
           //记录步数
        }
        return -1;
    }

2.处理当前是‘9’或‘0’的加减

 public String plusOne(String str,int i){
        char[] c = str.toCharArray();
        if(c[i]=='9'){
            c[i]='0';
        }else{
            c[i]+=1;
        }
        return new String(c);
    }
    
    public String minusOne(String str,int i){
        char[] c =str.toCharArray();
        if(c[i]=='0'){
          c[i]='9';
        }else{
            c[i]-=1;
        }
        return new String(c);
    }

3.记录已经遍历过的元素,保证不要重复选择 HashSet visite = new HashSet<>();

4.判断条件增加,遇到输入字符串和遍历到的字符串一样的时候,跳出当前循环,执行下一次循环

  for(int i=0;i<size;i++){
      String content = queue.poll();
      if(dends.contains(content))continue;
      ......

5.判断条件增加,找到目标值跳出循环

    for(int i=0;i<size;i++){
      String content = queue.poll();
      if(dends.contains(content))continue;
      if(content.equals(tar))return step;
      ......
全部评论
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-27 12:10

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务