사전 순서 전체 배열 출력 다음 자바 구현

1481 단어
package edu.pku.ss.hlj;

/**
 *      ,    1、2、3......n   ,                              。    5      
 * 12354 12345,  12345  ,  12354  。       ,5               12345,      54321。
 *        :
 *  P 1~n      :p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn
 * 1)        ,                 j(j       ),  j=max{i|pi         O(N),                           O(N^2)
 * 
 * @author Administrator
 * 
 */
public class Youdao2 {
	public static void main(String[] args) {
		String str = "839647521";
		System.out.println(function(str));
	}

	public static String function(String str) {
		char[] strs = str.toCharArray();
		int i = 0;
		int j = 0;
		int tempMin = 512;
		int tempCur = 0;
		StringBuffer sb = new StringBuffer(strs.length);
		for (i = strs.length - 2; i >= 0; i--) {
			if (strs[i] < strs[i + 1]) {
				break;
			}
		}
		for (j = i + 1; j < strs.length - 1; j++) {
			if (strs[j] > strs[i] && strs[j] < tempMin) {
				tempMin = strs[j];
				tempCur = j;
			}
		}
		swap(strs, i, tempCur);
		reverse(strs, i + 1, strs.length - 1);
		for (char c : strs) {
			sb.append(c);
		}
		return sb.toString();
	}

	public static void swap(char[] ch, int i, int j) {
		char temp;
		temp = ch[i];
		ch[i] = ch[j];
		ch[j] = temp;
	}

	public static void reverse(char[] ch, int i, int j) {
		int start = 0;
		int end = 0;
		for (start = i, end = j; start < end; start++, end--) {
			swap(ch, start, end);
		}
	}
}

좋은 웹페이지 즐겨찾기