From c8d621b5349e914684cfc03f0a50a6ee84861b2e Mon Sep 17 00:00:00 2001 From: fartem Date: Wed, 30 Oct 2024 07:11:51 +0300 Subject: [PATCH] 2024-10-30 v. 6.9.2: added "377. Combination Sum IV" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/377_combination_sum_iv.rb | 28 ++++++++++++++++++++++ test/medium/test_377_combination_sum_iv.rb | 11 +++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 lib/medium/377_combination_sum_iv.rb create mode 100644 test/medium/test_377_combination_sum_iv.rb diff --git a/README.md b/README.md index 5eb8e313..0d2ac392 100644 --- a/README.md +++ b/README.md @@ -557,3 +557,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 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) | | 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) | | 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) | +| 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) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index bc8f4d64..802e889d 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.9.1' + s.version = '6.9.2' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/377_combination_sum_iv.rb b/lib/medium/377_combination_sum_iv.rb new file mode 100644 index 00000000..f8512264 --- /dev/null +++ b/lib/medium/377_combination_sum_iv.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/combination-sum-iv/ +# @param {Integer[]} nums +# @param {Integer} target +# @return {Integer} +def combination_sum4(nums, target) + find(nums, ::Array.new(target + 1, -1), target) +end + +private + +# @param {Integer[]} nums +# @param {Integer[]} memo +# @param {Integer} target +# @return {Integer} +def find(nums, memo, target) + return 1 if target.zero? + + return 0 if target.negative? + + if memo[target] == -1 + memo[target] = 0 + nums.each { |num| memo[target] += find(nums, memo, target - num) } + end + + memo[target] +end diff --git a/test/medium/test_377_combination_sum_iv.rb b/test/medium/test_377_combination_sum_iv.rb new file mode 100644 index 00000000..b22400b8 --- /dev/null +++ b/test/medium/test_377_combination_sum_iv.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/377_combination_sum_iv' +require 'minitest/autorun' + +class CombinationSumIVTest < ::Minitest::Test + def test_default_one = assert_equal(7, combination_sum4([1, 2, 3], 4)) + + def test_default_two = assert_equal(0, combination_sum4([9], 3)) +end