Mittel 0 gelöst 0% Erfolgsquote

Nummernspirale-Abfrage

Finde einen Wert anhand von Zeile und Spalte in einer expandierenden Nummernspirale.

Das lernst du

  • Eine Formel in einem Zahlenmuster finden
  • Das Problem nach Schicht und Parität aufteilen
  • 64-Bit-Ganzzahlen für große Werte nutzen

Problem

Die unendliche Spirale beginnt in der Zelle oben links. Die ersten vier Zeilen und Spalten sind unten dargestellt. Setze das gleiche Muster in wachsenden quadratischen Schichten fort. Die Koordinaten beginnen bei 1.

 1   2   9  10
 4   3   8  11
 5   6   7  12
16  15  14  13

Gib den Wert einer einzelnen Zelle zurück, ohne das gesamte Gitter zu konstruieren.

Implementiere number_spiral(row, column).

Eingabe

row: Die von oben gezählte Zeile, beginnend bei 1.

column: Die von links gezählte Spalte, beginnend bei 1.

Ausgabe

Gib die Zahl an dieser Position zurück.

Einschränkungen

1 ≤ row, column ≤ 1.000.000.000. Der Wert passt in einen vorzeichenbehafteten 64-Bit-Integer.

Beispiele

Beispiel 1
Eingabe:
row = 3
column = 2

Erwartete Ausgabe:
expected = 6
Eingabe:
long long row = 3;
long long column = 2;

Erwartete Ausgabe:
long long expected = 6;
Eingabe:
long row = 3;
long column = 2;

Erwartete Ausgabe:
long expected = 6;

Erläuterung

In der dargestellten dritten Zeile ist der zweite Wert 6.

Beispiel 2
Eingabe:
row = 1
column = 4

Erwartete Ausgabe:
expected = 10
Eingabe:
long long row = 1;
long long column = 4;

Erwartete Ausgabe:
long long expected = 10;
Eingabe:
long row = 1;
long column = 4;

Erwartete Ausgabe:
long expected = 10;

Erläuterung

Die vierte quadratische Schicht beginnt in der obersten Zeile bei 10.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Die Spirale besteht aus quadratischen Schichten, also gehört eine Zelle zu einer Schicht, die durch die größere Koordinate bestimmt wird.

Hinweis 2

Nutze die Parität dieser Schicht, um zu entscheiden, ob die Werte entlang einer Zeile oder Spalte steigen.

Hinweis 3

Achte darauf, ob die Schicht zuerst von der linken oberen Ecke oder von der gegenüberliegenden Ecke aus erreicht wird.

Erwartete Komplexität

Zeit O(1), zusätzlicher Speicher O(1)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.