当前位置: 代码迷 >> 综合 >> Leetcode 351. Android Unlock Patterns (python)
  详细解决方案

Leetcode 351. Android Unlock Patterns (python)

热度:76   发布时间:2023-11-26 06:47:26.0

Leetcode 351. Android Unlock Patterns

  • 题目
  • 解法:backtracking

题目

在这里插入图片描述

解法:backtracking

这道题读懂题意挺关键。题目的意思是,从一个位置到另一个位置有两种情况,一种情况是到上下左右或者四个对角相邻的位置,另一种情况通过相邻且已经被访问过的位置到另一个不相邻的位置
主要思想就是铜鼓obacktracking来访问所有可能的解法。为啥是backtracking呢,因为对于解法的长度有一个范围,也就是当前一种解法成立的时候,继续扩展下去还有可能形成新的解法,至于具体的实现也需要很巧妙的设计。参考这个网址,里面有对解法的具体设计有很详细的解释:https://leetcode.com/problems/android-unlock-patterns/discuss/874714/Simple-Python-Solution-with-Explaination

class Solution:def numberOfPatterns(self, m: int, n: int) -> int:def backtracking(curr_key,step):if step == 1:return 1count = 0seen[curr_key] = Truefor i in range(1,10):# just continue is the key i has been visitedif seen[i]:continue# if key i not in d[curr_key],meaning it is a beighbor of curr_keyif i not in d[curr_key]:count += backtracking(i,step-1)if i in d[curr_key] and seen[d[curr_key][i]]:count += backtracking(i,step-1)seen[curr_key] = Falsereturn countseen = [False]*10total_way = 0d = {
    1:{
    9:5,3:2,7:4},  2:{
    8:5}, 3:{
    1:2,9:6, 7:5} , 4:{
    6:5},5:{
    }, 6:{
    4:5},7:{
    1:4,3:5,9:8}, 8:{
    2:5}, 9:{
    7:8,1:5,3:6}}for step in range(m,n+1):for curr_key in range(1,10):total_way += backtracking(curr_key,step)return total_way
  相关解决方案