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

解析方式一:非常暴力的方法,不建议这么做。想法就是把数组中的所有数据进行排列组合,然后进行排序,取最小的。

import java.util.*;public class Solution {List<Long> list = new ArrayList<>();//存放所有的组合情况public String PrintMinNumber(int [] numbers) {if(numbers.length==0){return "";}permutation(numbers,0,numbers.length);Collections.sort(list);//对list进行排序,是升序return list.get(0).toString();}public void permutation(int [] numbers,int from,int to){//做的全排列if(from==to){String s="";for(int i:numbers){s+=i;}list.add(Long.parseLong(s));}for(int i=from;i<to;i++){swap(numbers,from,i);permutation(numbers,from+1,to);swap(numbers,from,i);}}public void swap(int [] numbers, int from ,int to){int temp =numbers[from];numbers[from]=numbers[to];numbers[to]=temp;}
}

解析二:比较巧妙,直接利用comparator比较器,然后复写compare方法,用s1+s2与s2+s1进行比较,将小的组合放在前面。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {public String PrintMinNumber(int [] numbers) {int n;String s="";ArrayList<Integer> list=new ArrayList<Integer>();n=numbers.length;for(int i=0;i<n;i++){list.add(numbers[i]);//将数组放入arrayList中}//实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序Collections.sort(list,new Comparator<Integer>(){@Overridepublic int compare(Integer str1, Integer str2) {// TODO Auto-generated method stub         String s1=str1+""+str2;String s2=str2+""+str1;return s1.compareTo(s2);}});for(int j:list){s+=j;}return s;}
}

《剑指offer》把数组排成最小的数相关推荐

  1. 剑指offer 把数组排成最小的数 atoi和itoa,pow

    pow(x,y)在#include<math.h>文件中,计算x的y次方. C++引入头文件:#include <stdlib.h> 或者 #include <cstdl ...

  2. 4-剑指offer: 把数组排成最小的数

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

  3. 剑指offer 旋转数组的最小数字

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...

  4. [剑指offer] 旋转数组的最小数字

    本文首发于我的个人博客:尾尾部落 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2 ...

  5. 剑指offer之数组中重复的数(Java实现)

    数组中重复的数 NowCoder 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的, 也不知道每个数字重复几次.请找出数 ...

  6. 剑指offer.01 数组中重复的数(0504刷题自用)

    代码 class Solution {public:int findRepeatNumber(vector<int>& nums) {unordered_map <int,i ...

  7. 《剑指offer》-- 把数组排成最小的数、丑数、二进制中1的个数、表示数值的字符串、替换空格

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

  8. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  9. 剑指 Offer 笔记: T45. 把数组排成最小的数

    T45. 把数组排成最小的数 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" ...

  10. 【剑指offer-Java版】33把数组排成最小的数

    把数组排成最小的数 难点在于比较规则的确定以及比较规则的正确性证明 比如:仅仅是局部的两个数字的顺序较小,如何保证整个数组按此规则进行排序后达到全局的较小 书中关于这一点的证明直接用的反证法,忘的差不 ...

最新文章

  1. 怎样才能学好Vue,听听尤雨溪怎么说?
  2. servlet——请求乱码问题解决
  3. hdu1181变形课dfs/bfs/并查集三种解法(java)
  4. qlabel设置换行符无效_php 字符串中的\n换行符无效、不能换行的解决方法
  5. ERP开发中应用字符串解析实现界面翻译智能化
  6. iOS:给图片置灰色
  7. 赋能10000家合作伙伴! | 凌云时刻
  8. 建立立方体求面积和体积并用两种判断方法判断两个立方体是否相等(键盘输入数据)
  9. linux系统声音管理,Mplayer 音量控制详解
  10. 用VS编译出不依赖VC运行库的可独立运行的程序
  11. java opennlp_如何在Java中使用OpenNLP?
  12. c语言键盘连续双击程序,“到处乱跑”的光标!简单的C语言程序: 在室友的计算机上尝试!...
  13. 新浪邮箱服务器设置,新浪企业邮箱|帮助中心
  14. HTMl页面加入落叶下雨动画,基于HTML5+Webkit实现树叶飘落动画
  15. 内网穿透:什么是内网穿透,以及用什么软件
  16. Linux的20个常用命令
  17. 计算机提示没有有效的ip配置,Win7本地连接没有有效的ip配置怎么办?
  18. SQLServer 表分区 根据时间自动扩展分区
  19. iphone的图书iBooks如何设置垂直滚动看书
  20. 北理工计算机专业课2021,2021北理真题回忆 - 北京理工大学 - 王道论坛,专注于计算机考研的点点滴滴! - Powered by Discuz!...

热门文章

  1. Spring之SpringMVC(四)
  2. C++ getline() 和 get()
  3. pat 1025 反转链表
  4. bootstrap内容部分API解读(2)
  5. jQuery事件2——off取消事件绑定
  6. 大学c语言程序设计实训课实验报告,大学一年级下学期C语言程序设计实验报告答案 完整版...
  7. spring cloud 熔断_Spring Cloud 熔断器/断路器 Hystrix
  8. 手动修改Win7开机欢迎界面背景图片
  9. python科学计数法输出_python不以科学计数法输出的实例方法总结
  10. oracle exp consistent,exp CONSISTENT=Y 原理:export前发出SET TRANSACTION READ ONLY命令