LeetCod-KSum問題(配列トラバーサルの問題、HashMapの使用、再帰)



Leetcod Ksum Problem Ingenious Array Traversal Problem



崩壊のアイデア:
再帰的終了:2sum問題
再帰:K和問題をK –1和問題に減らします

import java.util.ArrayList import java.util.Arrays import java.util.LinkedList import java.util.List public class KSum { public List fourSum(int[] nums, int target) { Arrays.sort(nums) return kSum(nums, 0, 4, target) } private List kSum (int[] nums, int start, int k, int target) { int len = nums.length List res = new ArrayList() if(k == 2) { //twoSum: two pointers from left and right int left = start, right = len - 1 while(left int sum = nums[left] + nums[right] if(sum == target) { List path = new ArrayList() path.add(nums[left]) path.add(nums[right]) res.add(path) while(left 1]) left++ while(left 1]) right-- left++ right-- } else if (sum //move left left++ } else { //move right right-- } } } else { for(int i = start i 1) i++) { if(i > start && nums[i] == nums[i - 1]) continue List temp = kSum(nums, i + 1, k - 1, target - nums[i]) for(List t : temp) { t.add(0, nums[i]) } res.addAll(temp) } } return res } public static void main(String[] args) { int[] nums = new int[]{1, 0, -1, 0, -2, 2} int target = 0 List res = new LinkedList() KSum kSum = new KSum() res = kSum.fourSum(nums, target) System.out.println(res) } }