Я готовлюсь к собеседованию и застрял на этом вопросе в течение довольно долгого времени. Может кто-нибудь, пожалуйста, помогите мне с кодом. Если не полный, то может быть его фрагментом? Пожалуйста ..Перемещение 2D-массива в спиральном узоре с использованием рекурсии
ответ
Python 2, печатает 2D вложенный список в направлении по часовой стрелке от верхнего левого угла к центру:
>>> def clockwise(r):
... return list(r[0]) + clockwise(list(reversed(zip(*r[1:])))) if r else []
...
>>> a = [
... [ 1, 2, 3],
... [ 5, 6, 7],
... [ 9, 10, 11]]
>>> clockwise(a)
[1, 2, 3, 7, 11, 10, 9, 5, 6]
>>> a = [
... [ 1, 2, 3, 4],
... [ 5, 6, 7, 8],
... [ 9, 10, 11, 12],
... [13, 14, 15, 16]]
>>> clockwise(a)
[1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]
Так что здесь происходит? Аргумент clockwise
представляет собой двумерный массив r
. Мы хотим распечатать его содержимое слева направо, по часовой стрелке. Поэтому, если двухмерный массив не пуст, мы можем напечатать его первый элемент, который является верхней строкой. Затем мы хотим напечатать последние элементы оставшихся строк (числа справа). Мы не хотим повторять самих себя. Итак, что мы делаем, это преобразовать оставшиеся строки таким образом, чтобы следующие напечатанные числа находились в верхней строке. Мы делаем это, переставляя оставшиеся строки (чтобы они стали столбцами), а затем меняли их.
Возможно алгоритм становится яснее, если я пишу в Haskell:
import Data.List
clockwise :: [[a]] -> [a]
clockwise (x:xs) = x ++ (clockwise $ reverse $ transpose $ xs)
clockwise _ = []
- 1. C# Перемещение через изображение в спиральном движении?
- 2. Узел: Перемещение каталогов в рекурсии
- 3. Как печатать цифры в спиральном порядке?
- 4. Перемещение каталогов без использования рекурсии?
- 5. Несколько декораторов в орнаментальном узоре
- 6. сортировка с использованием рекурсии
- 7. Алгоритм с использованием рекурсии
- 8. Калькулятор с использованием рекурсии
- 9. Количество звонков с фасада в фасадном узоре
- 10. Факториал с использованием рекурсии
- 11. Метод с использованием рекурсии
- 12. Перемещение каталога без рекурсии в iOS
- 13. Перемещение хвоста в хвостовой рекурсии порядка
- 14. Генерировать фрактальные квадраты с использованием рекурсии
- 15. StrLen функции с использованием рекурсии в с
- 16. Единство приближения объекта в спиральном движении
- 17. двоичного поиска с использованием рекурсии
- 18. Реверсирование строки с использованием рекурсии
- 19. Рюкзак Решение с использованием рекурсии
- 20. с использованием рекурсии backtracking C++
- 21. Первичная факторизация с использованием рекурсии
- 22. Обратные символы с использованием рекурсии
- 23. Реверс строки с использованием рекурсии
- 24. Базовая конверсия с использованием рекурсии
- 25. Алгоритм сортировки с использованием рекурсии
- 26. объединение строк с использованием рекурсии
- 27. Поиск минимума с использованием рекурсии
- 28. Проверка участника с использованием рекурсии
- 29. Функция палиндрома с использованием рекурсии
- 30. Fast Fibonacci с использованием рекурсии
+1, хороший ответ – ChristopheD
хороший ответ наверняка! Но меня больше интересует подход и используемый алгоритм. Пожалуйста помоги. –
Я объясню это в секунду :) – Stephan202