hello-algo/zh-hant/codes/ruby/chapter_backtracking/subset_sum_i_naive.rb
Yudong Jin 3f4220de81
Bug fixes and improvements (#1380)
* preorder, inorder, postorder -> pre-order, in-order, post-order

* Bug fixes

* Bug fixes

* Update what_is_dsa.md

* Sync zh and zh-hant versions

* Sync zh and zh-hant versions.

* Update performance_evaluation.md and time_complexity.md

* Add @khoaxuantu to the landing page.

* Sync zh and zh-hant versions

* Add @ khoaxuantu to the landing page of zh-hant and en versions.
2024-05-31 16:39:06 +08:00

46 lines
1.2 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=begin
File: subset_sum_i_naive.rb
Created Time: 2024-05-22
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
### 回溯演算法:子集和 I ###
def backtrack(state, target, total, choices, res)
# 子集和等於 target 時,記錄解
if total == target
res << state.dup
return
end
# 走訪所有選擇
for i in 0...choices.length
# 剪枝:若子集和超過 target ,則跳過該選擇
next if total + choices[i] > target
# 嘗試:做出選擇,更新元素和 total
state << choices[i]
# 進行下一輪選擇
backtrack(state, target, total + choices[i], choices, res)
# 回退:撤銷選擇,恢復到之前的狀態
state.pop
end
end
### 求解子集和 I包含重複子集###
def subset_sum_i_naive(nums, target)
state = [] # 狀態(子集)
total = 0 # 子集和
res = [] # 結果串列(子集串列)
backtrack(state, target, total, nums, res)
res
end
### Driver Code ###
if __FILE__ == $0
nums = [3, 4, 5]
target = 9
res = subset_sum_i_naive(nums, target)
puts "輸入陣列 nums = #{nums}, target = #{target}"
puts "所有和等於 #{target} 的子集 res = #{res}"
puts "請注意,該方法輸出的結果包含重複集合"
end