1. 程式人生 > >劍指offer第32題(把陣列排成最小的數)

劍指offer第32題(把陣列排成最小的數)

題目:輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。

思路:

* 考慮到大數問題,先將整型陣列轉換成String陣列,然後將String陣列排序,最後將排好序的字串陣列拼接出來。關鍵就是制定排序規則。 * 排序規則如下: * 若ab > ba 則 a > b, * 若ab < ba 則 a < b, * 若ab = ba 則 a = b; * 解釋說明: * 比如 "3" < "31"但是 "331" > "313",所以要將二者拼接起來進行比較


本題總重點考察了重新comparetor介面的compare方法

程式碼:

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        if(numbers==null){
            return " ";
        }
        int 
len = numbers.length; String[] str = new String[len]; StringBuilder sb = new StringBuilder(); for(int i=0;i<len;i++){ str[i]=String.valueOf(numbers[i]); } Arrays.sort(str, new Comparator<String>() { @Override public int compare(String
o1, String o2) { String c1 = o1+o2; String c2 = o2+o1; return c1.compareTo(c2); } }); for(int i=0;i<len;i++){ sb.append(str[i]); } return sb.toString(); } }

相關推薦

offer32陣列排成小的數

題目:輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 思路: * 考慮到大數問題,先將整型陣列轉換成String陣列,然後將String陣列排序

offer32陣列排成小的數及關於list.sort()和sorted( Iterable object )函式的相關知識

 * 解題思路:  * 先將整型陣列轉 換成字元 陣列,然後將String陣列排序,最後將排好序的字串陣列拼接出來。關鍵就是制定 比較規則。  * 排序規則如下:  * 若ab > ba 則 a > b,

offer】旋轉陣列小數

題目描述 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋

offer程式設計JAVA實現)——32陣列排成小的數

github https://github.com/JasonZhangCauc/JZOffer import java.util.Arrays; import java.util.Comparator

offer【旋轉陣列小數字】c++實現

題目描述 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入一個非遞減序列的一個旋轉,輸出旋轉陣列的最小元素。例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 本題給的也算是有序數列,一看就應該和二分沾邊,事實也是這樣。 題目給的是非遞減序列,就是

Offer面試題33:陣列排成小的數 Java 實現,三種方法

題目:把陣列排成最小的數    輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這3個數字能排成的最小數字321323. 演算法分析: 1.最直接的辦法就是先求出這個陣列中所有數字

offer32JS演算法:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次

題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次 這是我某一次去朋友公司面試試水時出的面試題,結果給我五分鐘我寫了個for迴圈的方法,被狠狠鄙視/哭笑不得 結果回來後好奇就跟同事

offer24二叉樹中和為某一值的路徑

題目:輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 思想:由於本題中的根要在前面,因而我們首先想到的是前序遍歷。當用前序遍歷的方式訪問某一節點時,我們把該節點新增到路徑上,並累加

offer27字串排列

題目: 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述: 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 思路:首先求所

offer__旋轉陣列小數字

平臺 牛客網 語言 python2.7.3 作業內容 題目描述 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 如陣列 {3,4,5,1,2} 為 {1,2,3,4,5} 的一個旋轉,該陣列的最小

棧的壓入 彈出序列offer21

一、題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列, 但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這

陣列中出現次數超過一半的數字offer29

一、題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次, 超過陣列長度的一半,因此輸出2。如果不存在則輸出0 二、解題思路 (方法一):自己想出來的,時

重建二叉樹 offer

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 有思路,但是沒寫出來。還得多練練。 解釋一下大神的幾個關鍵

用兩個棧實現佇列 offer7

用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 棧的特點:先進後出 佇列的特點:先進先出 push很好實現。 pop可能有一點難度。最開始兩個棧中都沒有元素,所有進佇列的元素都存在stack1中。因為棧是先進後出,所有最先進來的要最後出,和佇列相反。所以需要藉助s

用兩個棧實現隊列 offer7

info 一個 .com 所有 有一點 bsp 都沒有 我想 完成 用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。 棧的特點:先進後出 隊列的特點:先進先出 push很好實現。 pop可能有一點難度。最開始兩個棧中都沒有元素,所有進隊列

offer3:從尾到頭打印鏈表

off 輸出結果 pre col 結構 ava image stack 鏈表 方法一:采用棧來存儲,用ArrayList保存。註意題目給出的輸出結果是ArrayList import java.util.ArrayList; import java.util.Sta

Offer--16 數值的整數次方

++ 循環 運算 判斷 api 比較 ron color 感覺 第16題 數值的整數次方 題目:給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 思路 看到有點懵,第一感覺覺得是不是應該考慮0的0次或者負數情況,

offer】從尾到頭列印連結串列

import java.util.ArrayList; public class Solution { ArrayList list=new ArrayList();//放在遞迴體外面,每次新

offer】用兩個棧實現佇列

 棧的實現是先進後出,佇列是先進先出。思路就是第一個棧的元素按次序出棧,然後第二個棧依次入棧,然後出棧。 import java.util.Stack; public class Solution

offer】斐波那契數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 剛開始覺得輸入為一個數,然後找到這個數在斐波那契數列中的位置