字典序全排列java实现
2013-11-02 15:44
246 查看
package permutation; import java.util.Scanner; public class DictionaryPermutation { // find the position need to exchange with minimum number which is larger than it public int getPosition(String str) { int pos = -1; char[] ch = str.toCharArray(); for (int i = str.length() - 1; i > 0; --i) { if (ch[i] > ch[i - 1]) { pos = i - 1; return pos; } } return pos; } // judge current permutation whether it is last public boolean hasNextPermutation(int pos) { if (pos == -1) return false; return true; } // string reverse public String reverseString(String str) { char[] ch = str.toCharArray(); for (int i = 0; i < str.length() / 2; ++i) { char temp = ch[i]; ch[i] = ch[str.length() - 1 - i]; ch[str.length() - 1 - i] = temp; } str = String.valueOf(ch); return str; } // get next permutation of current number public String nextPermutation(String str) { // TODO Auto-generated method stub char[] ch = str.toCharArray(); int pos = getPosition(str); if (pos >= 0) { // exchange the ch[position] with the minimum number which is lager // than it in its right. for (int i = pos + 1; i < str.length(); ++i) { if (i == str.length() - 1 && ch[i] > ch[pos]) { char temp = ch[pos]; ch[pos] = ch[i]; ch[i] = temp; } else if (ch[pos] > ch[i]) { char temp = ch[pos]; ch[pos] = ch[i - 1]; ch[i - 1] = temp; break; } } String substr1 = new String(); substr1 = String.valueOf(ch, pos + 1, str.length() - pos - 1); substr1 = reverseString(substr1); return String.valueOf(ch, 0, pos + 1) + substr1; } return null; } // print all permutation public int permutation(String str){ char[] ch = str.toCharArray(); for(int i = 0 ; i < str.length() ; ++i ){ System.out.print(ch[i]+" "); } System.out.println(); int times = 1; while (hasNextPermutation(getPosition(str))) { str = nextPermutation(str); ch = str.toCharArray(); for(int i = 0 ; i < str.length() ; ++i ){ System.out.print(ch[i]-48+" "); } System.out.println(); ++times; } System.out.println("times = " + times); return times; } //create public String creatPermutation(int number){ char[] ch = new char[number]; for(int i = 1 ; i <= number;++i) ch[i-1] = (char) (i + 48); return String.valueOf(ch); } public static void main(String[] args) { DictionaryPermutation dp = new DictionaryPermutation(); Scanner scan = new Scanner(System.in); System.out.println("please input the number of permutation:"); int num = scan.nextInt(); long start = System.currentTimeMillis(); dp.permutation(dp.creatPermutation(num)); long end = System.currentTimeMillis(); System.out.println("run time: " + (double)Math.round(end-start)/1000+" second"); } }
相关文章推荐
- 字典序全排列(java实现)
- 字典序全排列输出下一个的java实现
- java实现数组全排列
- 剑指offer----字符串的全排列----java实现
- 递归实现全排列(按字典序)
- 递归算法的java实现(取球、全排列、反转串、杨辉三角、AB组合)
- java递归实现全排列
- java实现全排列
- 【支付宝,微信支付必备】Java实现url参数按照参数名Unicode码从小到大排序(字典序)
- Java实现字符串的全排列
- Java实现——数组元素全排列
- Java实现的全排列和排列
- Java用递归实现的数组的全排列
- Java实现数组的全排列
- 用java实现用序数法生成全排列
- java实现全排列
- 转java实现数组全排列
- JavaShowAlgorithm-全排列算法递归和字典序实现
- java 递归实现元素全排列
- JAVA递归实现全排列