先写个全是数字的阿:) public class N { /** * @param args */ public static void main(String[] args) { int n=4; for(int i=0;(String.valueOf(i)).length()<=n;i++) { System.out.println(i); } } }
方法接受一个n作为密码的长度,chs是密码可能的取值集合。返回的所有结果保存在一个List中 reLen是你想返回的结果的个数,如果想返回所有可能的字符串,就传-1public static List getAll(int n, char[] chs, int reLen) { // 返回值 List relist = new ArrayList(); int chLen = chs.length; int[] indexs = new int[chLen]; // 返回的列表的长度不能超过chLen*n reLen = reLen == -1 ? chLen * n : reLen; reLen = reLen >= chLen * n ? chLen * n : reLen; // 循环创建可能的字符串 for (int i = 0; i < reLen; i++) { StringBuffer sb = new StringBuffer(); for (int j = 0; j < n; j++) { sb.append(chs[indexs[j]]); indexs[0]++; // 穷举 for (int k = 0; k < chLen; k++) { if (indexs[k] == chLen) { indexs[k] = 0; indexs[k + 1]++; } } } relist.add(sb.toString()); } return relist; } 请保证自己机器内存和CPU够牛,否则死机器我不负责:)
上面的程序有点问题,这个是完整的程序,可以运行: import java.util.ArrayList; import java.util.List;public class VaTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List re = getAll(3, new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' }, -1); for (int i = 0; i < re.size(); i++) { System.out.println(re.get(i)); } } public static List getAll(int n, char[] chs, int reLen) { // 返回值 List relist = new ArrayList(); int chLen = chs.length; int[] indexs = new int[chLen]; // 返回的列表的长度不能超过chLen*n int max = (int) Math.pow(chLen, n); reLen = reLen == -1 ? max : reLen; reLen = reLen > max ? max : reLen; // 循环创建可能的字符串 for (int i = 0; i < reLen; i++) { StringBuffer sb = new StringBuffer(); for (int j = 0; j < n; j++) { sb.append(chs[indexs[j]]); } // 穷举 indexs[0]++; for (int k = 0; k < chLen; k++) { if (indexs[k] == chLen) { indexs[k] = 0; indexs[k + 1]++; } else { break; } } relist.add(sb.toString()); } return relist; } }
public class N { /**
* @param args
*/
public static void main(String[] args)
{
int n=4;
for(int i=0;(String.valueOf(i)).length()<=n;i++)
{
System.out.println(i);
} }
}
reLen是你想返回的结果的个数,如果想返回所有可能的字符串,就传-1public static List getAll(int n, char[] chs, int reLen) {
// 返回值
List relist = new ArrayList();
int chLen = chs.length;
int[] indexs = new int[chLen];
// 返回的列表的长度不能超过chLen*n
reLen = reLen == -1 ? chLen * n : reLen;
reLen = reLen >= chLen * n ? chLen * n : reLen;
// 循环创建可能的字符串
for (int i = 0; i < reLen; i++) {
StringBuffer sb = new StringBuffer();
for (int j = 0; j < n; j++) {
sb.append(chs[indexs[j]]);
indexs[0]++;
// 穷举
for (int k = 0; k < chLen; k++) {
if (indexs[k] == chLen) {
indexs[k] = 0;
indexs[k + 1]++;
}
}
}
relist.add(sb.toString());
}
return relist;
}
请保证自己机器内存和CPU够牛,否则死机器我不负责:)
import java.util.ArrayList;
import java.util.List;public class VaTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List re = getAll(3, new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i' }, -1);
for (int i = 0; i < re.size(); i++) {
System.out.println(re.get(i));
} } public static List getAll(int n, char[] chs, int reLen) {
// 返回值
List relist = new ArrayList();
int chLen = chs.length;
int[] indexs = new int[chLen];
// 返回的列表的长度不能超过chLen*n
int max = (int) Math.pow(chLen, n);
reLen = reLen == -1 ? max : reLen;
reLen = reLen > max ? max : reLen;
// 循环创建可能的字符串
for (int i = 0; i < reLen; i++) {
StringBuffer sb = new StringBuffer();
for (int j = 0; j < n; j++) {
sb.append(chs[indexs[j]]); }
// 穷举
indexs[0]++;
for (int k = 0; k < chLen; k++) {
if (indexs[k] == chLen) {
indexs[k] = 0;
indexs[k + 1]++;
} else {
break;
}
}
relist.add(sb.toString());
}
return relist;
}
}