LeetCode Android Проблема разблокировки 351> Допустимые переходы - PullRequest
0 голосов
/ 13 апреля 2020

Один из способов разблокировать телефон Android - использовать комбинацию ударов по клавиатуре 1-9.

Чтобы шаблон был действительным, он должен удовлетворять следующим условиям:

  • Все его ключи должны быть различны.
  • Он не должен соединять две клавиши, перепрыгивая через третью клавишу, если только эта клавиша не была использована.

Например, 4 - 2 - 1 - 7 - действительный шаблон, тогда как 2 - 1 - 7 - нет.

Найдите общее количество действительных шаблонов разблокировки длиной N, где 1 <= N <= 9.

Invalid ход: 4 - 1 - 3 - 6
Строка 1 - 3 проходит через ключ 2, который не был выбран в шаблоне.

Недопустимый ход: 4 - 1 - 9 - 2
Строка 1 - 9 проходит через ключ 5, который не был выбран в шаблоне.

Допустимое перемещение: 2 - 4 - 1 - 3 - 6
Строка 1 - 3 действительна, поскольку она проходит через ключ 2, который был выбран в шаблоне

Допустимое движение: 6 - 5 - 4 - 1 - 9 - 2
Строка 1 - 9 действительна, поскольку она проходит через ключ 5, который ch был выбран в шаблоне.

| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |

Я могу решить проблему с помощью DFS. Но мы также должны рассмотреть пропуск / прыжок. Для решения этой проблемы я видел людей, которые сохраняли / использовали только следующие комбинации правильных прыжков.

, например,

int skip[][] = new int[10][10];
skip[1][3] = skip[3][1] = 2;
skip[1][7] = skip[7][1] = 4;
skip[3][9] = skip[9][3] = 6;
skip[7][9] = skip[9][7] = 8;
skip[1][9] = skip[9][1] = skip[2][8] = skip[8][2] = skip[3][7] = skip[7][3] = skip[4][6] = skip[6][4] = 5;

Может кто-нибудь помочь объяснить, почему следующая комбинация не включена в skip / jump?

skip[1][6] = skip[6][1] = 2;
skip[1][6] = skip[6][1] = 5;

Пример https://medium.com/@rebeccahezhang / leetcode-351- android -unlock-Pattern-d9bae4a8a958

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...