A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清心玉质 中级黑马   /  2015-9-21 16:53  /  306 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

getString()这个递归方法,复制了集合进行移除 再将移除后的集合作为参数传给此方法。我不明白的是 在i=0移除完后怎么还有不空集合传进去呢,还是我哪里理解错了,望高手指教

private static void combinations(String st,String s) {
                //将输入的字符串转化为字符数组,并定义集合用于存储字符元素
                ArrayList<Character> al =new ArrayList<Character>();
                char[] ch = s.toCharArray();
                //遍历字符数组,并将元素添加到集合
                for(char c:ch)
                {
                        al.add(c);
                }
                //调用getString()方法 并将集合与字符串传给方法
                getString(al,st);
        }
        
        private static void getString(ArrayList<Character> al,String prefix)
        {
                       
                for(int index=0;index<al.size();index++)
                {      //复制集合                           
                        ArrayList<Character> alCopy = new ArrayList<Character>();
                        alCopy.addAll(al);
                        String str=prefix+alCopy.get(index);
                        //移除复制集合中的元素
                        alCopy.remove(index);
                       //递归调用本方法
                        getString(alCopy,str);
                }
        }

1 个回复

正序浏览
不知道,也很困惑,按理说al.size==0的时候就不会执行for循环里面的内容。
不过如果你不使用alCopy,而直接操作al,就没有这个问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马