Đề bài
Xoắn ốc vô hạn bắt đầu tại ô trên cùng bên trái. Bốn hàng và bốn cột đầu tiên được hiển thị bên dưới. Tiếp tục theo cùng một quy luật với các lớp hình vuông mở rộng. Tọa độ bắt đầu từ 1.
1 2 9 10
4 3 8 11
5 6 7 12
16 15 14 13Trả về giá trị của một ô mà không cần xây dựng toàn bộ lưới.
Cài đặt hàm number_spiral(row, column).
Đầu vào
row: Số thứ tự hàng tính từ trên xuống, bắt đầu từ 1.
column: Số thứ tự cột tính từ trái sang, bắt đầu từ 1.
Đầu ra
Trả về số tại vị trí đó.
Ràng buộc
1 ≤ row, column ≤ 1.000.000.000. Giá trị trả về vừa với kiểu số nguyên có dấu 64-bit.
Ví dụ
Đầu vào:
row = 3
column = 2
Kết quả mong đợi:
expected = 6
Đầu vào:
long long row = 3;
long long column = 2;
Kết quả mong đợi:
long long expected = 6;
Đầu vào:
long row = 3;
long column = 2;
Kết quả mong đợi:
long expected = 6;
Giải thích
Ở hàng thứ ba được hiển thị, giá trị thứ hai là 6.
Đầu vào:
row = 1
column = 4
Kết quả mong đợi:
expected = 10
Đầu vào:
long long row = 1;
long long column = 4;
Kết quả mong đợi:
long long expected = 10;
Đầu vào:
long row = 1;
long column = 4;
Kết quả mong đợi:
long expected = 10;
Giải thích
Lớp hình vuông thứ tư bắt đầu tại số 10 ở hàng trên cùng.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Vòng xoắn được xây theo từng lớp vuông, nên một ô thuộc lớp được xác định bởi tọa độ lớn hơn.
Gợi ý 2
Dùng tính chẵn lẻ của lớp đó để quyết định giá trị tăng theo hàng hay theo cột.
Gợi ý 3
Chú ý lớp bắt đầu từ góc trên-trái hay từ góc đối diện trước.
Độ phức tạp mong đợi
thời gian O(1), bộ nhớ phụ O(1)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.