1424. Diagonal Traverse II
Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.
Дан двумерный Ganzzahl Array nums, return все elementы nums в диагональном порядке.
Beispiel:
Input: nums = [[1,2,3,4,5],[6,7],[8],[9,10,11],[12,13,14,15,16]]
Output: [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]
C# Lösung
zugeordnet/originalpublic class Solution {
public int[] FindDiagonalOrder(IList<IList<int>> nums) {
var queue = new Queue<(int row, int col)>();
queue.Enqueue((0, 0));
var ans = new List<int>();
while (queue.Count > 0) {
var (row, col) = queue.Dequeue();
ans.Add(nums[row][col]);
if (col == 0 && row + 1 < nums.Count) {
queue.Enqueue((row + 1, col));
}
if (col + 1 < nums[row].Count) {
queue.Enqueue((row, col + 1));
}
}
return ans.ToArray();
}
}
C++ Lösung
Auto-Entwurf, vor dem Einreichen prüfen#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public vector<int>& FindDiagonalOrder(IList<vector<int>> nums) {
var queue = new queue<(int row, int col)>();
queue.Enqueue((0, 0));
var ans = new List<int>();
while (queue.size() > 0) {
var (row, col) = queue.Dequeue();
ans.push_back(nums[row][col]);
if (col == 0 && row + 1 < nums.size()) {
queue.Enqueue((row + 1, col));
}
if (col + 1 < nums[row].size()) {
queue.Enqueue((row, col + 1));
}
}
return ans.ToArray();
}
}
Java Lösung
zugeordnet/originalclass Solution {
public int[] findDiagonalOrder(List<List<Integer>> nums) {
Queue<Pair<Integer, Integer>> queue = new LinkedList();
queue.offer(new Pair(0, 0));
List<Integer> ans = new ArrayList();
while (!queue.isEmpty()) {
Pair<Integer, Integer> p = queue.poll();
int row = p.getKey();
int col = p.getValue();
ans.add(nums.get(row).get(col));
if (col == 0 && row + 1 < nums.size()) {
queue.offer(new Pair(row + 1, col));
}
if (col + 1 < nums.get(row).size()) {
queue.offer(new Pair(row, col + 1));
}
}
int[] result = new int[ans.size()];
int i = 0;
for (int num : ans) {
result[i] = num;
i++;
}
return result;
}
}
JavaScript Lösung
zugeordnet/originalclass Solution {
findDiagonalOrder(nums) {
const queue = [[0, 0]];
const ans = [];
while (queue.length > 0) {
const [row, col] = queue.shift();
ans.push(nums[row][col]);
if (col === 0 && row + 1 < nums.length) {
queue.push([row + 1, col]);
}
if (col + 1 < nums[row].length) {
queue.push([row, col + 1]);
}
}
return ans;
}
}
Python Lösung
zugeordnet/originalfrom collections import deque
class Solution:
def findDiagonalOrder(self, nums: List[List[int]]) -> List[int]:
queue = deque([(0, 0)])
ans = []
while queue:
row, col = queue.popleft()
ans.append(nums[row][col])
if col == 0 and row + 1 < len(nums):
queue.append((row + 1, col))
if col + 1 < len(nums[row]):
queue.append((row, col + 1))
return ans
Go Lösung
zugeordnet/originalfunc findDiagonalOrder(nums [][]int) []int {
queue := []struct{ row, col int }{{0, 0}}
ans := []int{}
for len(queue) > 0 {
row, col := queue[0].row, queue[0].col
queue = queue[1:]
ans = append(ans, nums[row][col])
if col == 0 && row + 1 < len(nums) {
queue = append(queue, struct{ row, col int }{row + 1, col})
}
if col + 1 < len(nums[row]) {
queue = append(queue, struct{ row, col int }{row, col + 1})
}
}
return ans
}
Algorithm
Инициализируйте очередь с (0, 0) и список ответов ans.
Пока очередь не пуста:
Извлеките (row, col) из очереди.
Добавьте nums[row][col] в ans.
Если col == 0 и row + 1 в пределах Arrayа, добавьте (row + 1, col) в очередь.
Если col + 1 в пределах текущей строки, добавьте (row, col + 1) в очередь.
return ans.
😎
Stellen zu dieser Aufgabe
aktive Stellen with overlapping task tags are angezeigt.
Es gibt noch keine aktiven Stellen.