Skip to content

Commit 0aebe90

Browse files
committed
2024-07-11 v. 6.1.2: added "39. Combination Sum"
1 parent f4068fe commit 0aebe90

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,3 +477,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
477477
| 34. Find First and Last Position of Element in Sorted Array | [Link](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/) | [Link](./lib/medium/34_find_first_and_last_position_of_element_in_sorted_array.rb) |
478478
| 36. Valid Sudoku | [Link](https://leetcode.com/problems/valid-sudoku/) | [Link](./lib/medium/36_valid_sudoku.rb) |
479479
| 38. Count and Say | [Link](https://leetcode.com/problems/count-and-say/) | [Link](./lib/medium/38_count_and_say.rb) |
480+
| 39. Combination Sum | [Link](https://leetcode.com/problems/combination-sum/) | [Link](./lib/medium/39_combination_sum.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.1.1'
8+
s.version = '6.1.2'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE]
1111
s.executable = 'leetcode-ruby'

lib/medium/39_combination_sum.rb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/combination-sum/
4+
# @param {Integer[]} candidates
5+
# @param {Integer} target
6+
# @return {Integer[][]}
7+
def combination_sum(candidates, target)
8+
combine_sum(candidates, target, [], [])
9+
end
10+
11+
private
12+
13+
# @param {Integer[]} candidates
14+
# @param {Integer} target
15+
# @param {Integer[][]} result
16+
# @param {Integer[]} curr
17+
# @return {Integer[][]}
18+
def combine_sum(candidates, target, result, curr)
19+
find_combination(candidates, target, 0, result, curr)
20+
21+
result
22+
end
23+
24+
# @param {Integer[]} candidates
25+
# @param {Integer} target
26+
# @param {Integer} start
27+
# @param {Integer[][]} result
28+
# @param {Integer[]} curr
29+
# @return {Void}
30+
def find_combination(candidates, target, start, result, curr)
31+
if target.zero?
32+
result << curr.dup
33+
34+
return
35+
end
36+
37+
return if target.negative?
38+
39+
(start...candidates.length).each do |i|
40+
curr << candidates[i]
41+
find_combination(candidates, target - candidates[i], i, result, curr)
42+
curr.delete_at(curr.length - 1)
43+
end
44+
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/39_combination_sum'
5+
require 'minitest/autorun'
6+
7+
class CombinationSumTest < ::Minitest::Test
8+
def test_default
9+
assert_equal([[2, 2, 3], [7]], combination_sum([2, 3, 6, 7], 7))
10+
assert_equal([[2, 2, 2, 2], [2, 3, 3], [3, 5]], combination_sum([2, 3, 5], 8))
11+
assert_equal([], combination_sum([2], 1))
12+
end
13+
end

0 commit comments

Comments
 (0)