輸入12345,找出全部的字典序排序(12345,12354,12435,12453···,21345···,31245···,41235···,51234···54321)。並且在所有字典序中,找出,滿足序列2 1 5排序的最小的子串行
舉例:12345不滿足2 1 5
3 2 4 1 5滿足,2 1 3 4 5也滿足,相比較21345為滿足要求的最小的子串行
思路:1.求出所有字典序排序(見部落格main38,輸入abc,輸出abc,acb,bac,bca,cab,cba);
2.過濾滿足滿足條件的子串行(見部落格main20,判斷乙個字串是否為數值)
class
wangyiyoudao
char
chars = str.
tochararray()
; arrays.
sort
(chars)
;//將字元陣列按公升序排列
list.
add(string.
valueof
(chars));
//0.先將按公升序排列後的字串存入list中
while
(true)if
(i ==0)
從從最後乙個位置開始,往前遍歷,遇到大於chars[i-1]的值時停下
// 注意在遇到等於chars[i-1]的值的時候一定不要停下,不然會造成死迴圈(因為此時交換的是值相同的兩個數)
while
(j >=
0&& chars[j]
<= chars[i -1]
)//3.
swap
(chars, i -
1, j)
;//交換chars[i-1]和chars[j]的值
reverse
(chars, i)
;//反轉包括chars[i]元素在內到陣列結尾的所有元素
list.
add(string.
valueof
(chars));
}return list;
}private
static
void
reverse
(char
ch,
int i)
}private
static
void
swap
(char
chars,
int i,
int j)
public
static
void
main
(string[
] args)
/** * 過濾所有字典序,要求滿足2 1 5這種順序的,找出最小的滿足條件的字典序
* 比如: 12345(不滿足 2 1 5),比如 32415(滿足 2 1 5)順序,而且21345(也滿足2 1 5)且21345是滿足中的排在最前的
* @param list
* @param str
*/private
static
void
permit
(list
list,string standard)
else
if(s.
charat
(j)== standard.
charat(2
))else
if(s.
charat
(j)== standard.
charat(4
))if(exist1 &&
!exist2)
if(exist5 &&
(!exist2 ||
!exist1))}
if(j ==5)
//(j<4執行後j=5<5不滿足)此時s合格,滿足 2 1 5,比如 2 1 3 4 5(1出現之前,2出現了)(5出現之前2,1都出現了)
res.
add(s);}
collections.
sort
(res)
; system.out.
println
(res.
get(0)
);}}
1403 非遞增順序的最小子序列
給你乙個陣列nums,請你從中抽取乙個子串行,滿足該子串行的元素之和嚴格大於未包含在該子串行中的各元素之和。如果存在多個解決方案,只需返回長度最小的子串行。如果仍然有多個解決方案,則返回元素之和最大的子串行。與子陣列不同的地方在於,陣列的子串行 不強調元素在原陣列中的連續性,也就是說,它可以通過從陣...
1403 非遞增順序的最小子序列
題目描述 給你乙個陣列 nums,請你從中抽取乙個子串行,滿足該子串行的元素之和 嚴格 大於未包含在該子串行中的各元素之和。如果存在多個解決方案,只需返回 長度最小 的子串行。如果仍然有多個解決方案,則返回 元素之和最大 的子串行。與子陣列不同的地方在於,陣列的子串行 不強調元素在原陣列中的連續性,...
1403 非遞增順序的最小子序列
給你乙個陣列 nums,請你從中抽取乙個子串行,滿足該子串行的元素之和 嚴格 大於未包含在該子串行中的各元素之和。如果存在多個解決方案,只需返回 長度最小 的子串行。如果仍然有多個解決方案,則返回 元素之和最大 的子串行。與子陣列不同的地方在於,陣列的子串行 不強調元素在原陣列中的連續性,也就是說,...