Java递归全排列

	
    public static Stream<Integer> range(final Integer start, Integer length, Integer step, List<Integer> except) {  
        Supplier<Integer> seed = new Supplier<Integer>() {  
  
            private Integer next = start;  
  
            @Override  
            public Integer get() {  
                Integer _next = next;  
                next += step;  
                return _next;  
            }  
        };  
        return Stream.generate(seed).limit(length).filter(new Predicate<Integer>()     {
            @Override  
            public boolean test(Integer t) {  
                if (except == null)  
                    return true;  
                if (except.contains(t))  
                    return false;  
                return true;  
            }  
        });  
    }  
 
    List<Integer> list = new ArrayList<Integer>();
	AtomicInteger count = new AtomicInteger(0);
	public void WholeArrangement(int N) {
		Stream<Integer> range = range(0, N, 1, list);
		range.forEach(new Consumer<Integer>() {
			@Override
			public void accept(Integer t) {
				list.add(t);
				WholeArrangement(N);
				list.remove(list.size() - 1);
			}
		});
		if (list.size() == N) {
			count.incrementAndGet();
			System.out.println(Arrays.toString(list.toArray()));
		}
	}

猜你喜欢

转载自solong1980.iteye.com/blog/2391184