亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

劍指Offer-把數組排成最小的數

標簽:
Java 算法

最近一直在复习一些算法及数据结构方面的东西,就找了一个适合找工作笔试的题目,在剑指Offer上刷了几道题目,发现对复习知识点还是很有用的,做到重建二叉树这块。递归传值出了点问题,debug半小时才找出错误,所有还是写篇博客记录一下。也推荐要找工作的伙伴去剑指Offer刷题。

       

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。


一看这个问题第一反应该是全排列的问题,数组中3个元素,也就是A33 = 3X2X1=6,就是高中学的排列问题,这种问题直接DFS就可以了,下面贴代码:

	    static long flag[] = new long[1000];
	    static long value[] = new long[1000];
	    
	    public static String PrintMinNumber(int [] numbers) {
	        
	         return  "" + dfs(numbers,numbers.length,0);
	    }
	    
	    public static String dfs(int [] numbers,int count,int index){
	        
	        if(index == count ){
	            StringBuffer str = new StringBuffer("");
	            for(int i = 0 ; i < count  ; i++){
	                 str.append(value[i]);
	            }
         System.out.println(str);
	            return str.toString();
	        }
	        
	        String min = "99999999999999999999999";
	        
	        for(int i = 0 ; i < count ; i++){
	            if(flag[i] == 0){
	                flag[i] = 1;
	                value[index] = numbers[i];
	                
	                String temp = dfs(numbers,numbers.length,index+1);
	                
	                if(min.compareTo(temp) > 0) {
	                	min = temp;
	                }
	                flag[i] = 0;
	            }
	        }
	        
	        return min;
	    }
		
		
		
		public static void main(String[] args) {
	    	
			String minNumber = PrintMinNumber(new int[] {3334,3,3333332});
//			String minNumber = PrintMinNumber(new int[] {32,3,321});
			System.out.println("最小的字符串为"+minNumber);
       }

333433333332
333433333323
333343333332
333333323334
333333233343
333333233334
最小的字符串为: 333333233334

之前我是用Int型来返回数据的,结果oj系统数据太大,超出范围了,我换成Long也不行,所以我就直接返回String就好了,最后对每个字符串进行字典排序就行了。


點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
7794
獲贊與收藏
665

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消