public List<Integer> grayCode(int n) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(0);
        for(int i =0; i < n;i++){
            int base = 1 << i;
            for(int j = list.size()-1;j >=0;j--){
                list.add(base + list.get(j));
            }
        }
        return list;
    }