首页 > 试题广场 >

解密

[编程题]解密
  • 热度指数:3760 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
亮亮深吸一口气,小心地将盒子打开,里面是一张地图,地图上除了一些奇怪的字母以外没有任何路线信息,这可让亮亮犯了愁,这些字母代表了什么意思呢? 亮亮绞尽脑汁也想不出什么思路,突然,亮亮眼前一亮,“我可以把这些字母所有的排列方式全部写出来,一定可以找到答案!” 于是,亮亮兴奋的开始寻找字母里的秘密。

输入描述:
每组数据输入只有一行,是一个由不同的大写字母组成的字符串,已知字符串的长度在1到9之间,我们假设对于大写字母有'A' < 'B' < ... < 'Y' < 'Z'。


输出描述:
输出这个字符串的所有排列方式,每行一个排列,要求字母序比较小的排列在前面。
示例1

输入

WHL

输出

HLW<br/> HWL<br/> LHW<br/> LWH<br/> WHL<br/> WLH<br/>
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			char[] ch = sc.next().toCharArray();
			List<String> list = new ArrayList<String>();
			permutation(ch, 0, list);
			Collections.sort(list);
			for (String s:list) {
				System.out.println(s);
			}
		}
	}
	public static void permutation(char[] ch, int p, List<String> list) {
		String res = "";
		if(p == ch.length - 1) {
			for (int i = 0; i < ch.length; i ++ ) {
				res += ch[i] + "";
			}
			list.add(res);
		} else {
			for (int i = p; i < ch.length; i ++ ) {
				swap(ch, p, i);
				permutation(ch, p + 1, list);
				swap(ch, p, i);
			}
		}
	}
	public static void swap(char[] ch, int o1, int o2) {
		char temp = ch[o1];
		ch[o1] = ch[o2];
		ch[o2] = temp;
	}
}

发表于 2016-09-04 17:30:04 回复(0)

//之前获取排列组合方法有超出内存,做出来还是很开心的。希望有帮助
import java.util.*;
public class Main {
    static List<String> list=new ArrayList<String>();
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner=new Scanner(System.in);     
        while (scanner.hasNext())
            {
             String input=scanner.nextLine();
           permutation(input.toCharArray(), 0); //获取排列组合
             Collections.sort(list,new Comparator<String>() //按照字母排序
      {
                @Override
                public int compare(String o1, String o2)
                {  return compare1(o2,o1,0);
                } });
             for (String string : list)
                    System.out.println(string);
             }
        scanner.close();
    }
    
    public static int compare1(String o1, String o2,int n)
    {
     if (o2.charAt(n)-o1.charAt(n)==0)
        {
            return compare1(o1,o2,n+1);
        }
     else {
            return o2.charAt(n)-o1.charAt(n);
        }
    }
    public static void permutation(char[] str, int i) {
        if (i >= str.length)
            return;
        if (i == str.length - 1) {
            list.add(String.valueOf(str));
        } else {
            for (int j = i; j < str.length; j++) {
                char temp = str[j];
                str[j] = str[i];
                str[i] = temp;
                permutation(str, i + 1);
                temp = str[j];
                str[j] = str[i];
                str[i] = temp;
            }
        }
    }
}
发表于 2016-07-29 17:46:48 回复(0)