java遞歸實現string xyz排序

wKiom1byU6DzztKXAAA5_BlSwTo581.png

先用上面的一張圖說明邏輯,這就是遞歸的邏輯。

xy排序就相當於在x的空位插上y,x只有兩個空位,y插前面得帶yx,y插後面得到xy

xyz排序就相當於在xy排序的所有結果插上z,結果如圖

代碼實現如下

        public static void main(String[] args){
		List<String> list = sort("xy","k");
		for(String s:list){
			System.out.println(s);
		}
	}
	public static List<String> sort(String main,String insert){
		List<String> result  = new ArrayList<>();
		if(main.length() == 1){
			result.add(main+insert);
			result.add(insert+main);
		}else{
			List<String> lastResult = sort(main.substring(0,main.length()-1),main.substring(main.length()-1));
			for(String s:lastResult){
				int insertIndex = 0;
				while(insertIndex<=s.length()){
					if(insertIndex == 0){
						result.add(insert+s);
					}else if(insertIndex == s.length()){
						result.add(s+insert);
					}else{
						result.add(s.substring(0, insertIndex)+insert+s.substring(insertIndex, s.length()));
					}
					insertIndex++;
				}
			}
		}
		return result;
	};

測試結果是:zxy;xzy;xyz;zyx;yzx;yxz;

另外測試abcd排序結果是:dcab;cdab;cadb;cabd;dacb;adcb;acdb;acbd;dabc;adbc;abdc;abcd;dcba;cdba;cbda;cbad;dbca;bdca;bcda;bcad;dbac;bdac;badc;bacd;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章