Проверьте приращение смежных точек в матрице, JavaScript
Я использую CodeFights в течение пары дней (что я очень рекомендую, так как это отличный способ развить свои навыки), и сегодня я столкнулся с проблемой, которую я не мог решить для своей жизни. Я ненавижу отдавать решения, но ничего, что я пробовал, не сработало бы.
Обычно проблема заключалась в следующем: учитывая любую матрицу чисел, такую как
[1,4,5,8]
[2,3,6,7]
в качестве параметра функции верните true, если, начиная с верхнего левого угла, вы можете пройти по всем числам в массиве, увеличиваясь на единицу каждый раз, перемещаясь только в соседние точки. Итак, я начинаю с 1, 2 - рядом, поэтому я могу двигаться туда, 3 - рядом с 2, поэтому я могу двигаться туда, и так далее, и так далее. Если вы не можете пройти через всю матрицу, верните false. Это кажется довольно простым, пока вы не приступите к этому. Вы должны:
- Отслеживайте и сравнивайте количество проверенных элементов с количеством элементов в матрице. - Каким-то образом проверьте каждое соседнее пятно на предмет значения текущего пятна +1, а затем сделайте это текущим пятном. Затем продолжайте проверять, пока у вас не закончатся цифры, в противном случае верните false.
Я пробовал так много разных способов сделать это, используя 3 или 4 уровня вложенности for
циклы, и ничего, что я пробовал, не будет работать для всех тестовых случаев. Я, вероятно, никогда не увижу проблему снова, но ради знаний, кто-нибудь может указать мне правильное направление? А именно, просто помогая мне понять, как эффективно сравнивать соседние пробелы в матрице (возможно, чтобы избежать раздачи ответа для будущих CodeFighters)?
Просто для ясности:
Функция будет настроена на передачу в матрице:
function traverse(matrix) {
}
и что-то вроде этого вернет истину:
[[ 1, 4, 5, 8]
[ 2, 3, 6, 7]]
и что-то вроде этого вернет false:
[[ 1, 3, 5, 8]
[ 2, 4, 9, 7]
[10,12, 6,11]]
Любая помощь, чтобы понять, где я мог ошибиться в своей казни, очень ценится. (Кстати, я не могу опубликовать именно то, что я пытался, потому что я не верю, что есть способ вернуться к этому на веб-сайте.)