Skip to content

Commit c8d621b

Browse files
committed
2024-10-30 v. 6.9.2: added "377. Combination Sum IV"
1 parent ca7ca08 commit c8d621b

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,3 +557,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
557557
| 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) |
558558
| 347. Top K Frequent Elements | [Link](https://leetcode.com/problems/top-k-frequent-elements/) | [Link](./lib/medium/347_top_k_frequent_elements.rb) | [Link](./test/medium/test_347_top_k_frequent_elements.rb) |
559559
| 371. Sum of Two Integers | [Link](https://leetcode.com/problems/sum-of-two-integers/) | [Link](./lib/medium/371_sum_of_two_integers.rb) | [Link](./test/medium/test_371_sum_of_two_integers.rb) |
560+
| 377. Combination Sum IV | [Link](https://leetcode.com/problems/combination-sum-iv/) | [Link](./lib/medium/377_combination_sum_iv.rb) | [Link](./test/medium/test_377_combination_sum_iv.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.9.1'
8+
s.version = '6.9.2'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
1111
s.executable = 'leetcode-ruby'

lib/medium/377_combination_sum_iv.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/combination-sum-iv/
4+
# @param {Integer[]} nums
5+
# @param {Integer} target
6+
# @return {Integer}
7+
def combination_sum4(nums, target)
8+
find(nums, ::Array.new(target + 1, -1), target)
9+
end
10+
11+
private
12+
13+
# @param {Integer[]} nums
14+
# @param {Integer[]} memo
15+
# @param {Integer} target
16+
# @return {Integer}
17+
def find(nums, memo, target)
18+
return 1 if target.zero?
19+
20+
return 0 if target.negative?
21+
22+
if memo[target] == -1
23+
memo[target] = 0
24+
nums.each { |num| memo[target] += find(nums, memo, target - num) }
25+
end
26+
27+
memo[target]
28+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/377_combination_sum_iv'
5+
require 'minitest/autorun'
6+
7+
class CombinationSumIVTest < ::Minitest::Test
8+
def test_default_one = assert_equal(7, combination_sum4([1, 2, 3], 4))
9+
10+
def test_default_two = assert_equal(0, combination_sum4([9], 3))
11+
end

0 commit comments

Comments
 (0)