英文原题
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’. The wheels can rotate freely and wrap around: for example we can turn ‘9’ to be ‘0’, or ‘0’ to be ‘9’. Each move consists of turning one wheel one slot.
The lock initially starts at ‘0000’, a string representing the state of the 4 wheels.
You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it.
Given a target representing the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible.
1 | Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202" |
分析
题目大概意思是,一个四位密码锁一个数字转动一位算作一次,同时有一些密码组合如果出现那么锁就锁死了,问要最少转多少次可以开锁。 这道题用到BFS来做,比起二叉树,这道题算是一个更一般化的BFS,在处理每一步转动的时候用到了ord和chr的转换,加10是因为考虑到零往前转一步是9的情况。
python 代码
1 | class Solution: |