如同QQ号算密码的程序一样,输入一个密码长度,比如6
那么算法就会从a-z,0-9的范围类列出所有组合
比如aasf01,wxt53a,abcdef,345gd3。

解决方案 »

  1.   

    先写个全是数字的阿:)
    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);
    } }
    }
      

  2.   

    方法接受一个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够牛,否则死机器我不负责:)
      

  3.   

    上面的程序有点问题,这个是完整的程序,可以运行:
    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;
    }
    }