Сложность: easy
Дана двумерная сетка размером m x n и целое число k. Требуется сдвинуть сетку k раз. За одну операцию сдвига: элемент в grid[i][j] перемещается в grid[i][j + 1]. Элемент в grid[i][n - 1] перемещается в grid[i + 1][0]. Элемент в grid[m - 1][n - 1] перемещается в grid[0][0]. Верните двумерную сетку после применения операции сдвига k раз.
Пример:
Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1
Output: [[9,1,2],[3,4,5],[6,7,8]]
👨💻 Алгоритм:
1⃣Преобразовать двумерную сетку в одномерный массив.
2⃣Выполнить сдвиг элементов в одномерном массиве.
3⃣Преобразовать одномерный массив обратно в двумерную сетку.
😎 Решение:
class Solution {
func shiftGrid(_ grid: [[Int]], _ k: Int) -> [[Int]] {
let m = grid.count
let n = grid[0].count
let total = m * n
var k = k % total
if k == 0 {
return grid
}
var flatArray = [Int]()
for row in grid {
flatArray.append(contentsOf: row)
}
let newArray = Array(flatArray[total - k..<total]) + Array(flatArray[0..<total - k])
var newGrid = [[Int]]()
for i in 0..<m {
let newRow = Array(newArray[i * n..<(i + 1) * n])
newGrid.append(newRow)
}
return newGrid
}
}Ставь 👍 и забирай 📚 Базу знаний