Subsets
Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
 - The solution set must not contain duplicate subsets.
 
For example, If nums = [1,2,3], a solution is:
[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]
题目大意:返回给定数组的所有子集,每个子集内元素非降序排列,不允许重复
题目难度:Medium
import java.util.*;
/**
 * Created by gzdaijie on 16/6/3
 * 数组的子集共有2^n个
 * 事实上,0 -> 2^n-1的二进制数就是子集的一种表示方式
 * 二进制的第k位为0,表示子集不含第k个元素,为1则含
 */
public class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        result.add(new ArrayList<Integer>());
        if (nums == null || nums.length == 0) return result;
        int len = nums.length;
        long count = 1 << len;
        Arrays.sort(nums);
        for (int i = 1; i < count; i++) {
            long t = i;
            List<Integer> item = new ArrayList<>();
            for (int j = 0; j < len; j++ , t = t >> 1) {
                if ((t & 1) == 1) item.add(nums[j]);
            }
            result.add(item);
        }
        return result;
    }
}