劍指offer 32 時間效率 把陣列排成最小的數

2022-06-29 05:45:10 字數 1457 閱讀 5397

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。

暴力破解法

public string printminnumber(int

numbers)

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(int

numbers)

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可以自己定義排序的規則,這樣將兩個數拼接之後的數進行比較,比較完之後...