輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
暴力破解法
public string printminnumber(intnumbers)
return
string.valueof(min);
}private
min)
min=math.min(min, integer.parseint(sb.tostring()));
sb.delete( 0, sb.length() );
swap(numbers,j,i);
}
}return
min;
}private
void swap(int numbers,int i, int
j)
public
static
void
main(string args) ;
system.out.println(printminnumber.printminnumber(numbers));
}
以上是行不通的
先將整型陣列轉換成string陣列,然後將string陣列排序,最後將排好序的字串陣列拼接出來。關鍵就是制定排序規則。
* 排序規則如下:
* 若ab > ba 則 a > b,
* 若ab < ba 則 a < b,
* 若ab = ba 則 a = b;
* 解釋說明:
* 比如
"3"
<
"31"
但是
"331"
>
"313"
,所以要將二者拼接起來進行比較
即比較兩個字串s1, s2大小的時候,先將它們拼接起來,比較s1+s2,和s2+s1那個大,如果s1+s2大,那說明s2應該放前面,所以按這個規則,s2就應該排在s1前面。
public string printminnumber(intnumbers)
collections.sort(list,
new comparator()
});for(int
j:list)
return
s; }
}
劍指offer32 醜數
把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。題意理解 1.直接法。逐個判斷每個整數是不是醜數的解法,直觀但不夠高效 所謂乙個數m是另乙個數n的因子,是指n能被m整除,...
劍指Offer (32)把陣列排成最小的數
題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。實現如下 要將所有元素組合成乙個最小的數 那麼組合的相鄰元素之間都是num1num2的形式 所以使用庫函式的sort將各個元素以str...
劍指offer 32 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。當然這個題可以用暴力求解,那麼複雜度會比較高,在這裡利用stl演算法sort可以自己定義排序的規則,這樣將兩個數拼接之後的數進行比較,比較完之後...