LeetCode078 Subsets
来源:互联网 发布:淘宝物流服务质量分 编辑:程序博客网 时间:2024/06/08 21:41
详细见:leetcode.com/problems/subsets
Java Solution: github
package leetcode;/* * Given a set of distinct integers, nums, return all possible subsets.Note: 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], []] */import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class P078_Subsets {public static void main(String[] args) {List<List<Integer>> ans = new Solution().subsets(new int[] {3, 2, 1, 0});Iterator<List<Integer>> it = ans.iterator();while (it.hasNext()) {tools.Utils.B_打印List_Integer_OneLine(it.next());}}/* * 比上题逻辑要好得多 * AC * 2 ms */static class Solution {List<List<Integer>> ans = new LinkedList<List<Integer>>();int[] ks = null; public List<List<Integer>> subsets(int[] nums) { ks = new int[nums.length]; for (int list_size = 0; list_size <= nums.length; list_size ++) search(nums, list_size, 0, -1); return ans; }private void search(int[] nums, int list_size, int li, int maxi) {if (li == list_size) {List<Integer> temp = new ArrayList<Integer>(list_size);for (int i = 0; i != list_size; i ++)temp.add(ks[i]);ans.add(temp);return;}for (int i = maxi + 1; i < nums.length; i ++) {ks[li ++] = nums[i];search(nums, list_size, li, i);li --;}}}}
C Solution: github
/* url: leetcode.com/problems/subsets/ AC 3ms 47.37%*/#include <stdio.h>#include <stdlib.h>typedef int* T;typedef struct al sal;typedef struct al * pal;struct al { int capacity; int size; T* arr;};pal al_init(int capacity) { pal l = (pal) malloc(sizeof(sal)); if (capacity < 1) return NULL; l->arr = (T*) malloc(sizeof(T) * capacity); l->capacity = capacity; l->size = 0; return l;}void al_expand_capacity(pal l) { T* new_arr = (T*) malloc(sizeof(T) * (l->capacity * 2 + 1)); int i = 0; for (i = 0; i < l->capacity; i ++) new_arr[i] = l->arr[i]; free(l->arr); l->arr = new_arr; l->capacity = l->capacity * 2 + 1;}void al_add_last(pal l, T v) { if (l->capacity == l->size) al_expand_capacity(l); l->arr[l->size] = v; l->size ++;}T* al_convert_to_array_free_l(pal l) { T* arr = l->arr; free(l); return arr;}int* arr_copy(int* save, int n) { int* copy = (int*) malloc(sizeof(int) * n); int i = 0; for (i = 0; i < n; i ++) copy[i] = save[i]; return copy;}//[l, r]int _partition(int* n, int l, int r) { int s = *(n + l); while (l < r) { while (l < r && *(n + r) >= s) r --; *(n + l) = *(n + r); while (l < r && *(n + l) <= s) l ++; *(n + r) = *(n + l); } *(n + l) = s; return l;}//[l, r)void _quick_sort(int* n, int l, int r) { int p = 0; if (l < r) { p = _partition(n, l, r - 1); _quick_sort(n, l, p); _quick_sort(n, p + 1, r); }}void search(int* n, int ni, int nn, int* save, int si, int sn, pal l, pal ln) { int* t = NULL; int i = 0; if (si == sn) { al_add_last(l, arr_copy(save, sn)); t = (int*) malloc(sizeof(int)); t[0] = sn; al_add_last(ln, t); return; } for (i = ni; i < nn; i ++) { if (i != 0 && n[i-1] == n[i]) continue; save[si] = n[i]; search(n, i+1, nn, save, si+1, sn, l, ln); }}int** subsets(int* n, int nn, int** cn, int* rn) { int ni = 0; int* save = (int*) malloc(sizeof(int) * nn); int sn = 0; pal l = al_init(16); pal ln = al_init(16); _quick_sort(n, 0, nn); for (sn = 0; sn <= nn; sn ++) { search(n, 0, nn, save, 0, sn, l, ln); } *cn = (int*) malloc(sizeof(int) * ln->size); *rn = ln->size; for (ni = 0; ni < ln->size; ni ++) { (*cn)[ni] = ln->arr[ni][0]; } return al_convert_to_array_free_l(l);}int main() { int n[] = {1, 2, 3}; int nn = 3; int* cn = NULL; int rn = 0; int** ans = subsets(n, nn, &cn, &rn); printf("size is %d\r\n", rn);}
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/subsets @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月18日 @details: Solution: 59ms 49.62%'''class Solution(object): def search(self, n, ni, nn, s, si, sn, a): if si == sn: a.append(list(s)) return for i in range(ni, nn): if i != 0 and n[i]==n[i-1]: continue s[si] = n[i] self.search(n, i+1, nn, s, si+1, sn, a) def subsets(self, n): """ :type n: List[int] :rtype: List[List[int]] """ if n == None or len(n) == 0: return [] n.sort(key=None, reverse=False) a, nn = [], len(n) for i in range(nn+1): s = [0] * i self.search(n, 0, nn, s, 0, i, a) return aif __name__ == "__main__": n = [1 ,2, 3] print(Solution().subsets(n))
0 0
- LeetCode078 Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- Subsets
- matlab 实现图像的二值化、对比度拉伸变化
- 理解python中的__str__, __call__, __init__, __getattr__
- Java封装,继承和多态总结
- Object对象
- 项目中遇到的问题
- LeetCode078 Subsets
- 一个简单的贪吃蛇
- java学习笔记13——JDBC初步
- Python中使用NLTK库解决错误:LookupError: from nltk.book import
- Canvas中的drawImage
- zzuli 2130: hipercijevi
- hpuoj 杨辉三角
- Specified web-root folder does not exist
- 破解QTP10插件时,注册表中没有HKEY_LOCAL_MACHINE -- SOFTWARE -- mercury Interactive我们该怎么办?