JAVA优化

quanwe 2016-05-19 09:44:59

for(String str1:list){
for(String str2:list){
for(String str3:list){
for(String str4:list){
for(String str5:list){
for(String str6:list){
for(String str7:list){
for(String str8:list){
str=str1+str2+str3+str4+str5+str6+str7+str8;
现在要做的就是str遍历str1 2345678

如果有n怎么办?

谁能优化或者递归? 效率要求最快的分最高
...全文
126 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rencht 2016-05-20
  • 打赏
  • 举报
回复
引用 1 楼 rencht 的回复:
一个很直观地使用递归的解法是:对list每个元素,拼接上长度为n-1的结果。 比如,list是abc,n是2,则perm(abc, 2)=a.perm(abc, 1)+b.perm(abc, 1)+c.perm(abc, 1)。 大概这样:
    public List<String> perm(List<String> list, int number) {
    	if (number == 1) {
    		return list;
    	}
    	Set<String> set = new HashSet<String>();
    	List<String> results = new ArrayList<String>();
    	for (String str : list) {
			if (!set.contains(str)) {
				set.add(str);
				List<String> subResults = perm(list, number - 1);
				for (String subResult : subResults) {
					results.add(str + subResult);
				}
			}
		}
    	return results;
    }
时间复杂度是O(m^n),m是list的长度。 当然,输出结果就有m^n个。
rencht 2016-05-20
  • 打赏
  • 举报
回复
一个很直观地使用递归的解法是:对list每个元素,拼接上长度为n-1的结果。 比如,list是abc,n是2,则perm(abc, 2)=a.perm(abc, 1)+b.perm(abc, 1)+c.perm(abc, 1)。 大概这样:
    public List<String> perm(List<String> list, int number) {
    	if (number == 1) {
    		return list;
    	}
    	Set<String> set = new HashSet<String>();
    	List<String> results = new ArrayList<String>();
    	for (String str : list) {
			if (!set.contains(str)) {
				set.add(str);
				List<String> subResults = perm(list, number - 1);
				for (String subResult : subResults) {
					results.add(str + subResult);
				}
			}
		}
    	return results;
    }
bree06 2016-05-20
  • 打赏
  • 举报
回复
直接for是最直接高效的方法了.

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧