diff --git a/README.md b/README.md index c9fada5a..52c341aa 100644 --- a/README.md +++ b/README.md @@ -487,3 +487,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 55. Jump Game | [Link](https://leetcode.com/problems/jump-game/) | [Link](./lib/medium/55_jump_game.rb) | | 56. Merge Intervals | [Link](https://leetcode.com/problems/merge-intervals/) | [Link](./lib/medium/56_merge_intervals.rb) | | 57. Insert Interval | [Link](https://leetcode.com/problems/insert-interval/) | [Link](./lib/medium/57_insert_interval.rb) | +| 59. Spiral Matrix II | [Link](https://leetcode.com/problems/spiral-matrix-ii/) | [Link](./lib/medium/59_spiral_matrix_ii.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index f89b4feb..edfc242a 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '6.2.1' + s.version = '6.2.2' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE] s.executable = 'leetcode-ruby' diff --git a/lib/medium/59_spiral_matrix_ii.rb b/lib/medium/59_spiral_matrix_ii.rb new file mode 100644 index 00000000..d2ee7f3f --- /dev/null +++ b/lib/medium/59_spiral_matrix_ii.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/spiral-matrix-ii/ +# @param {Integer} n +# @return {Integer[][]} +def generate_matrix(n) + i = 0 + j = 0 + up = 0 + right = 1 + left = 2 + down = 4 + + up_side = 0 + right_side = n + left_side = -1 + down_side = n + direction = right + value = 0 + result = ::Array.new(n) { ::Array.new(n) { nil } } + + while value < n * n + if direction == up + while i > up_side + value += 1 + result[i][j] = value + i -= 1 + end + + i += 1 + j += 1 + up_side += 1 + direction = right + elsif direction == right + while j < right_side + value += 1 + result[i][j] = value + j += 1 + end + + i += 1 + j -= 1 + right_side -= 1 + direction = down + elsif direction == left + while j > left_side + value += 1 + result[i][j] = value + j -= 1 + end + + i -= 1 + j += 1 + left_side += 1 + direction = up + else + while i < down_side + value += 1 + result[i][j] = value + i += 1 + end + + i -= 1 + j -= 1 + down_side -= 1 + direction = left + end + end + + result +end diff --git a/test/medium/test_59_spiral_matrix_ii.rb b/test/medium/test_59_spiral_matrix_ii.rb new file mode 100644 index 00000000..1b81a57c --- /dev/null +++ b/test/medium/test_59_spiral_matrix_ii.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/59_spiral_matrix_ii' +require 'minitest/autorun' + +class SpiralMatrixIITest < ::Minitest::Test + def test_default + assert_equal([[1, 2, 3], [8, 9, 4], [7, 6, 5]], generate_matrix(3)) + assert_equal([[1]], generate_matrix(1)) + end +end