java递归问题,求助 很着急

如有数组[["白色","黑色"],["64GB","128GB"],["中国移动","中国联通"]]
要拼接返回一个数组
如["白色/64GB/中国移动","黑色/64GB/中国移动","白色/128GB/中国移动","黑色/128GB/中国移动","白色/64GB/中国联通","黑色/64GB/中国联通","白色/128GB/中国联通","黑色/128GB/中国联通"]

问题是 数组[["白色","黑色"],["64GB","128GB"],["中国移动","中国联通"]] 不是固定的的 可能只有一个数组 可能有两个数组 可能有三个数组 可能有四个数组
数组里的值也不固定 ,可能只有一个,可能有5个
有大神在吗?

7个回答

public class test {
public static List> source;

public static void main(String[] args) {
    source = new ArrayList<>();

    List<String> a = new ArrayList<String>();
    a.add("黑色");
    a.add("白色");
    List<String> b = new ArrayList<String>();
    b.add("64G");
    b.add("128G");
    List<String> c = new ArrayList<String>();
    c.add("中国联通");
    c.add("中国移动");
    source.add(a);
    source.add(b);
    source.add(c);
    ArrayList<String> result = new ArrayList<>();
    recursion(result, source.get(0), 0, "");
    System.out.println(result);
}

public static void recursion(List<String> result, List<String> para, int num, String choose) {

    for (int i = 0; i < para.size(); i++) {
        if (source.size() == num + 1) {
            result.add(choose + "/" + para.get(i));
        } else {
            recursion(result, source.get(num + 1), num + 1, choose + "/" + para.get(i));
        }
    }
}

}

u010606701
求知小门生 谢谢大神~!!!
一年多之前 回复
geruiii
苦逼程序猿gg 回复u010606701: 在下面加个判断num=0的时候就不用加 num>0的时候给他加上"/" if (num == 0){ recursion(result, source.get(num + 1), num + 1, choose + para.get(i)); }else { recursion(result, source.get(num + 1), num + 1, choose+ "/" + para.get(i)); }
一年多之前 回复
u010606701
求知小门生 大神 第一位不需要/ (斜杠) 怎么去掉呢?白色/128G/中国移动
一年多之前 回复
geruiii
苦逼程序猿gg 回复flymanveryhigh: 可以,这个是简版,那如果说要减少内存占用其实还有很多方法
一年多之前 回复
flymanveryhigh
flymanveryhigh 就是把3个矩阵相乘,得到的坐标就是你想要的数据。
一年多之前 回复
flymanveryhigh
flymanveryhigh 不如把赋值变成坐标,到数组里取数据,提高效率,减少内存占用
一年多之前 回复

图片说明
consle:[/黑色/64G/中国联通, /黑色/64G/中国移动, /黑色/128G/中国联通, /黑色/128G/中国移动, /白色/64G/中国联通, /白色/64G/中国移动, /白色/128G/中国联通, /白色/128G/中国移动]

public static void main(String[] args) {
String arr[] = {"12g","32g","64g"};
String att [] = {"黑色","白色","黄色"};
String att1 [] = {"小","中","大"};
List list = new ArrayList();
list.add(arr);
list.add(att);
list.add(att1);
List list1 = test(list, new ArrayList(),arr, "");
System.out.println(list1);

}
public static List<String> test(List<String[]> list,List<String> result, String[] arr, String str)  
{  

    for (int i = 0; i < list.size(); i++)  
    {  
        //取得当前的数组  
        if (i == list.indexOf(arr))  
        {  
            //迭代数组  
            for (String st : arr)  
            {  
                st = str+"#" + st;  
                if (i < list.size() - 1)  
                {  
                    test(list,result, list.get(i + 1), st);  
                }  
                else if (i == list.size() - 1)  
                {  
                    result.add(st);

                }  
            }  
        }  
    }  
    return result;
}  
    }
u010606701
求知小门生 大神,可以把arr数组换成List吗?
一年多之前 回复

public class ThirdpartyApplicationTests {
static ArrayList source;
public static void main(String[] args) {
source = new ArrayList<>();

  String[] a = {"黑色","白色"};
  String[] b = {"64G","128G"};
  String[] c = {"中国联通","中国移动"};
  source.add(a);
  source.add(b);
  source.add(c);
  ArrayList<String> result = new ArrayList<>();
  recursion(result,source.get(0),0,"");
  System.out.println(result);

}

public static void recursion(List result,String[] para,int num,String choose){

  for (int i = 0; i < para.length; i++) {
     if (source.size() == num+1){
        result.add(choose+"/"+para[i]);
     }else {
        recursion(result,source.get(num+1),num+1,choose+"/"+para[i]);
     }
  }

}

}

geruiii
苦逼程序猿gg 回复u010606701: 回复在下面了太长了 list的
一年多之前 回复
u010606701
求知小门生 大神,可以把上面的三个数组换成List吗?
一年多之前 回复

第一步,把数据记进数据库3张表。
第二部,3表联合查询得出结果。
完事。

public static void main(String[] args) {
List list = new ArrayList();
list.add(new String[]{"白色","黑色"});
list.add(new String[]{"64GB","128GB"});
list.add(new String[]{"中国移动","中国联通"});

    List<String> resultList = new ArrayList<>();
    for(int a = 0;a < list.get(0).length;a++){
        for(int b = 0;b < list.get(1).length;b++){
            for(int c = 0;c < list.get(2).length;c++){
                resultList.add(list.get(0)[a]+"/"+list.get(1)[b]+"/"+list.get(2)[c]);
            }
        }
    }
    System.out.println(resultList);
}
 String[] str1 = new String[]{"白色","黑色"};
        String[] str2 = new String[]{"64g","128g"};
        String[] str3 = new String[]{"移动","联通"};

        StringBuilder sb = null;
        List<String> lis = new ArrayList<String>();
        for(String s1 : str1){
            for(String s2 : str2){
                for(String s3 : str3){
                    sb = new StringBuilder();
                    sb.append(s1).append(s2).append(s3);
                    lis.add(sb.toString());
                }
            }
        }

        for(String str : lis){
            System.out.println(str);
        }
u010606701
求知小门生 因为 数组不明确有几个,数组里的值也不明确有几个
一年多之前 回复
u010606701
求知小门生 你好,请问用递归怎么写呢》??
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!