Skip to content

Commit eef48c6

Browse files
committed
2024-10-25 v. 6.8.9: added "341. Flatten Nested List Iterator"
1 parent 27b4d6a commit eef48c6

File tree

4 files changed

+117
-1
lines changed

4 files changed

+117
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,3 +554,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
554554
| 328. Odd Even Linked List | [Link](https://leetcode.com/problems/odd-even-linked-list/) | [Link](./lib/medium/328_odd_even_linked_list.rb) | [Link](./test/medium/test_328_odd_even_linked_list.rb) |
555555
| 331. Verify Preorder Serialization of a Binary Tree | [Link](https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/) | [Link](./lib/medium/331_verify_preorder_serialization_of_a_binary_tree.rb) | [Link](./test/medium/test_331_verify_preorder_serialization_of_a_binary_tree.rb) |
556556
| 334. Increasing Triplet Subsequence | [Link](https://leetcode.com/problems/increasing-triplet-subsequence/) | [Link](./lib/medium/334_increasing_triplet_subsequence.rb) | [Link](./test/medium/test_334_increasing_triplet_subsequence.rb) |
557+
| 341. Flatten Nested List Iterator | [Link](https://leetcode.com/problems/flatten-nested-list-iterator/) | [Link](./lib/medium/341_flatten_nested_list_iterator.rb) | [Link](./test/medium/test_341_flatten_nested_list_iterator.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.8.8'
8+
s.version = '6.8.9'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/flatten-nested-list-iterator/
4+
class NestedIterator
5+
# @param {NestedInteger[]} nested_list
6+
def initialize(nested_list)
7+
@values = []
8+
@pointer = 0
9+
10+
prepare(nested_list)
11+
end
12+
13+
# @return {Boolean}
14+
def has_next = @pointer < @values.size
15+
16+
# @return {Integer}
17+
def next
18+
val = @values[@pointer]
19+
@pointer += 1
20+
21+
val
22+
end
23+
24+
private
25+
26+
# @param {NestedInteger[]} nested_list
27+
# @return {Integer[]}
28+
def prepare(nested_list)
29+
nested_list.each do |num|
30+
if num.is_integer
31+
@values << num.get_integer
32+
else
33+
prepare(num.get_list)
34+
end
35+
end
36+
end
37+
end
38+
39+
# NestedInteger for NestedIterator
40+
class NestedInteger
41+
# @param {NestenInteger} num
42+
def initialize(num)
43+
@num = num
44+
end
45+
46+
# @return {Boolean}
47+
def is_integer = @num.is_a?(::Integer)
48+
49+
# @return {Integer}
50+
def get_integer = @num
51+
52+
# @return {Array}
53+
def get_list = @num
54+
end
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/341_flatten_nested_list_iterator'
5+
require 'minitest/autorun'
6+
7+
class FlattenNestedListIteratorTest < ::Minitest::Test
8+
def test_default_one
9+
nested_iterator = ::NestedIterator.new(
10+
[
11+
::NestedInteger.new(
12+
[
13+
::NestedInteger.new(1),
14+
::NestedInteger.new(1)
15+
]
16+
),
17+
::NestedInteger.new(2),
18+
::NestedInteger.new(
19+
[
20+
::NestedInteger.new(1),
21+
::NestedInteger.new(1)
22+
]
23+
)
24+
]
25+
)
26+
27+
assert_equal(1, nested_iterator.next)
28+
assert_equal(1, nested_iterator.next)
29+
assert_equal(2, nested_iterator.next)
30+
assert_equal(1, nested_iterator.next)
31+
assert_equal(1, nested_iterator.next)
32+
33+
assert(!nested_iterator.has_next)
34+
end
35+
36+
def test_default_two
37+
# [1,[4,[6]]]
38+
39+
nested_iterator = ::NestedIterator.new(
40+
[
41+
::NestedInteger.new(1),
42+
::NestedInteger.new(
43+
[
44+
::NestedInteger.new(4),
45+
::NestedInteger.new(
46+
[
47+
::NestedInteger.new(6)
48+
]
49+
)
50+
]
51+
)
52+
]
53+
)
54+
55+
assert_equal(1, nested_iterator.next)
56+
assert_equal(4, nested_iterator.next)
57+
assert_equal(6, nested_iterator.next)
58+
59+
assert(!nested_iterator.has_next)
60+
end
61+
end

0 commit comments

Comments
 (0)