BFS算法
import java.util.*; public class Solution { public int open (ArrayList<String> vec, String tar) { //记录非法密码 Set<String> deadPassword = new HashSet<>(); for(String s:vec){ deadPassword.add(s); } //记录已经穷举过的密码,防止重复 Set<String> visited = new HashSet<>(); Queue<String> q = new LinkedList<>(); q.offer("0000"); int step = 0; visited.add("0000"); while(!q.isEmpty()){ int size = q.size(); for(int i = 0;i<size;i++){ String cur = q.poll(); if(deadPassword.contains(cur)){ continue; } if(cur.equals(tar)){ return step; } for(int j = 0;j<4;j++){ String up = plusOne(cur,j); if(!visited.contains(up)){ q.offer(up); visited.add(up); } String down = minusOne(cur,j); if(!visited.contains(down)){ q.offer(down); visited.add(down); } } } step++; } return -1; } //向上拨动一位 private String plusOne(String s,int i){ char[] ch = s.toCharArray(); if(ch[i] == '9'){ ch[i] = '0'; }else{ ch[i] += 1; } return new String(ch); } //向下拨动一位 private String minusOne(String s,int i){ char[] ch = s.toCharArray(); if(ch[i] == '0'){ ch[i] = '9'; }else{ ch[i] -= 1; } return new String(ch); } }