m個元素的集合取n個元素的子集
阿新 • • 發佈:2019-02-10
{
privateint m;
privateint[] set;
privateboolean first;
privateint position;
public NofM(int n, int m)
{
this.m = m;
first =true;
position = n -1;
set =newint[n];
for(int i =0; i < n; i++)
set[i] = i +1;
}
publicboolean hasNext()
{
return set[0] < m - set.length +1;
}
publicint[] next()
{
if(first)
{
first =false;
return set;
}
if(set[set.length-1] == m)
position--;
else
position = set.length -1;
set[position]++; // 調整右邊元素
for(int i = position +1; i < set.length; i++)
set[i] = set[i-1] +1;
return set;
}
publicstaticvoid main(String[] args)
{
NofM nOfm =new NofM(4, 9);
while(nOfm.hasNext())
{
int[] set = nOfm.next();
for(int i =0; i < set.length; i++)
{
System.out.print(set[i]);
}
System.out.println();
}
}
}
privateint m;
privateint[] set;
privateboolean first;
privateint position;
public NofM(int n, int m)
{
this.m = m;
first =true;
position = n -1;
set =newint[n];
for(int
set[i] = i +1;
}
publicboolean hasNext()
{
return set[0] < m - set.length +1;
}
publicint[] next()
{
if(first)
{
first =false;
}
if(set[set.length-1] == m)
position--;
else
position = set.length -1;
set[position]++; // 調整右邊元素
for(int i = position
set[i] = set[i-1] +1;
return set;
}
publicstaticvoid main(String[] args)
{
NofM nOfm =new NofM(4, 9);
while(nOfm.hasNext())
{
int[] set = nOfm.next();
for(int i =0; i < set.length; i++)
{
System.out.print(set[i]);
}
System.out.println();
}
}
}