剑指Offer:把数组排成最小的数【45】
剑指Offer:把数组排成最小的数【45】
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如,输入数组是{3.32.321},则打印出来的这3个数字能拼接成的最小数字是321323.
方法论
简要思路
最暴力的方法是把这个数组中的所有数字的全排列暴力出来,然后找个最小的。但是显然我们不能这么做。
我们应该定义一个排序规则,:
先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。 * 排序规则如下: * 若ab > ba 则 a > b, * 若ab < ba 则 a < b, * 若ab = ba 则 a = b; * 解释说明: * 比如 "3" < "31"但是 "331" > "313",所以要将二者拼接起来进行比较. 
总结就是说,要把数组元素组成一个最小值,我们可以让数组元素按照最小值排列的规则进行排序,而最小值排列的排序规则就是让两两组合值较小的那种情况下的元素放在前面,我们可以用冒泡排序排列来想象这个过程。
Java代码
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner; public class NumArrToMinNum {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String line =input.nextLine();
String[]arr =line.split(" ");
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o1+o2).compareTo(o2+o1);
}
});
String re="";
for(String str:arr)
re+=str;
System.out.println(re);
} public String PrintMinNumber(int [] numbers) {
String[]arr =new String[numbers.length];
for(int i=0;i<arr.length;i++)
arr[i]=String.valueOf(numbers[i]);
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o1+o2).compareTo(o2+o1);
}
});
String re="";
for(String str:arr)
re+=str;
return (re);
}
}
剑指Offer:把数组排成最小的数【45】的更多相关文章
- [剑指Offer]45-把数组排成最小的数
题目链接 https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&t ...
- 剑指Offer——把数组排成最小的数
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 排 ...
- 用js刷剑指offer(把数组排成最小的数)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 对ve ...
- 剑指offer 把数组排成最小的数 atoi和itoa,pow
pow(x,y)在#include<math.h>文件中,计算x的y次方. C++引入头文件:#include <stdlib.h> 或者 #include <cstdl ...
- leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数
这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的 179. Largest Number a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_strin ...
- 剑指offer--32.把数组排成最小的数
用to_string()将整形转化为字符串,对字符串进行比较 --------------------------------------------------------------------- ...
- 剑指Offer-39.把数组排成最小的数(C++/Java)
题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 将数组 ...
- 4-剑指offer: 把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 代码: cl ...
- 剑指Offer31 把数组排成最小的数
/************************************************************************* > File Name: 31_SortAr ...
- 剑指Offer 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
随机推荐
- Mac环境下svn命令行的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- Android Touch事件传递机制详解 上
最近总是遇到关于Android Touch事件的问题,如:滑动冲突的问题,以前也花时间学习过Android Touch事件的传递机制,可以每次用起来的时候总是忘记了,索性自己总结一下写篇文章避免以后忘 ...
- Scut游戏服务器引擎6.0.5.2发布
1. 增加C#脚本中能引用多个C#脚本文件的支持2. 修正Web应用程序中使用C#脚本解析不到Bin目录的问题
- Jinja2文档学习
这些文档需要精度一遍 1.http://jinja.pocoo.org/docs/dev/ 2.http://jinja.pocoo.org/docs/dev/templates/# 3.https: ...
- 人工神经网络--ANN
神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方 ...
- span设置padding无效
<span style="display:inline-block;padding-top:10px">测试<span> 给span加属性 display: ...
- android listView 滑动载入数据 该数据是服务端获取的
package com.sunway.works.applycash; import java.util.ArrayList; import java.util.Calendar; import ja ...
- Node.js自动化技术实现(Java)
Node.js自动化测试框架(NodeTestFramework):
- 上传项目至svn服务器,从svn上获取项目
1.在桌面右键->TortoiseSVn->Repo_brower->输入地址,进入 ,ok 2.在地址目录上右键==>>add folder==>>选择你要 ...
- JAVA Eclipse开发Android程序会经常闪退是怎么回事
类没有new就直接用会闪退,比如下面我在前面声明了ClientSocket的类,点击连接按钮之后,如果不先new就直接Connect就会闪退 你在当前页面创建findViewById的时候,如果找 ...