• 蓝桥杯——说好的进阶之去反复元素的排列组合


    将待排列(组合)的数组,先分别统计出种类和个数,然后进行避免反复的排列(组合)。

    /* 1,1,2,3的排列组合 去反复
    	 * (借此复习排列组合)
    	 * 
    	 * 1:2 2个1
    	 * 2:1 1个2
    	 * 3:1 1个3
    	 * 
    	 * */	
    	static int[] iarr = new int[3];//目标序列
    	static int[] carr = new int[] { 1, 2, 3 };//3种item
    	static int[] used = new int[] { 2, 1, 1 };//每种item有几个可用
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		System.out.println("不反复的排列:");
    		dfs(0);
    		System.out.println("不反复的组合:(字典序)");
    		cal(0, 0);		
    		
    	}	
    
    	static void dfs(int p) {
    		if (p == 3) {
    			// find
    			for (int i : iarr) {
    				System.out.print(i + "");
    			}
    			System.out.println();
    		} else {
    			for (int i = 0; i < used.length; i++) {
    				if (used[i] > 0) {
    					used[i]--;
    					iarr[p] = carr[i];
    					dfs(p + 1);
    					used[i]++;
    				}
    			}
    		}
    	}
    
    	static void cal(int p, int j) {
    		if (p == 3) {
    			// find
    			for (int i : iarr) {
    				System.out.print(i + "");
    			}
    			System.out.println();
    		} else {
    			for (; j < used.length; j++) {
    				if (used[j] > 0) {
    					used[j]--;
    					iarr[p] = carr[j];
    					cal(p + 1, j);
    					used[j]++;
    				}
    			}
    		}
    	}


  • 相关阅读:
    MYSQL判断某个表是否已经存在
    百度、雅虎、谷歌搜索引擎接口调用注意事项
    Codeigniter整合Tank Auth权限类库的教程
    短链接的生成算法
    自定义String
    运算符和结合性
    字符串类封装
    运算符重载
    数组类封装
    友元
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4095836.html
Copyright © 2020-2023  润新知