zoukankan      html  css  js  c++  java
  • m元素集合的n个元素子集

    理论:

    假设有5个元素的集点,取出3个元素的可能子集如下:
    {1 2 3}、{1 2 4 }、{1 2 5}、{1 3 4}、{1 3 5}、{1 4 5}、{2 3 4}、{2 3 5}、{2 4 5}、{3 4 5}

    这些子集已经使用字典顺序排列,如此才可以观察出一些规则:
    如果最右一个元素小於m,则如同码錶一样的不断加1
    如果右边一位已至最大值,则加1的位置往左移
    每次加1的位置往左移后,必须重新调整右边的元素為递减顺序

    java实现:

    package 经典;
    public class NofM {
        private int m;
        private int[] set;
        private boolean first;
        private int position;
        
        public NofM(int n, int m) {
            
            this.m=m;
            first=true;
            position=n-1;
            
            set=new int[n];
            for(int i=0; i<n; i++)
                set[i]=i+1;
        }
        
        public boolean hasNext(){
                return set[0]<m-set.length+1;
        }
        
        public int[] next(){
            
            boolean flag=false;
            if(first)
            {
                first=false;
                return set;
            }
            
            if(set[set.length-1]==m)
            {
                position--;
                flag=true;
            }
            else
            {
                position=set.length-1;
            }
            set[position]++;
            
            // 調整右邊元素 
            if(flag==true)
            {
            for(int i=position+1; i<set.length; i++)
                set[i]=set[i-1]+1;
            }
            return set;
        }
        
        public static void main(String[] args) {
            NofM nofm=new NofM(3,5);
            
            while(nofm.hasNext())
            {
                int[] set=nofm.next();
                
                for(int i=0; i<set.length; i++)
                    System.out.print(set[i]);
                System.out.println();
            }
        }
    }
  • 相关阅读:
    【数论】错排问题
    【数论】求逆元的几种方式
    【数论】卢卡斯定理模板 洛谷P3807
    【单调队列优化dp】 分组
    【期望dp】绵羊跳弹簧
    软件工程总结
    结对项目-地铁出行路线规划程序(续)
    个人作业--week3
    个人作业-week2
    个人作业-week1
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4008427.html
Copyright © 2011-2022 走看看