Leetcode 77 Combinations 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合

题目:

给定两个整数 n 和 k,返回 1 ... 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

解决办法:

package test;

import java.util.ArrayList;
import java.util.List;

public class LC77Try1
{
	public List<List<Integer>> combine(int n, int k)
	{
		List<List<Integer>> ret = new ArrayList<List<Integer>>();
		if (k > n)
		{
			return ret;
		}
		List<Integer> list = new ArrayList<Integer>();
		getpass(n, k, list, ret, 1);

		return ret;

	}

	public void getpass(int n, int k, List<Integer> list,
			List<List<Integer>> ret, int start)
	{
		if (list.size() == k)
		{
			ret.add(new ArrayList<Integer>(list));
			return;
		}
		int len = list.size();
		for (int i = start; i <= n; i++)
		{   
			//加上下面着一个判断语句,速度就提高了很多,嘿嘿
			if (n - i < (k - len-1))
			{
                return;
			}
			list.add(i);
			getpass(n, k, list, ret, i + 1);
			list.remove(list.size() - 1);
		}
	}

	public static void main(String[] args)
	{
		LC77Try1 t = new LC77Try1();
		List<List<Integer>> ret = t.combine(4, 3);
		for (int i = 0; i < ret.size(); i++)
		{
			List<Integer> list = ret.get(i);
			for (int j = 0; j < list.size(); j++)
			{
				System.out.print(list.get(j) + " , ");
			}
			System.out.println(" ");
		}
	}

}

哈哈

猜你喜欢

转载自blog.csdn.net/ata_123/article/details/80914719