剑指Offer(第二版)面试题45:把数组排成最小的数
来源:互联网 发布:数据变异程度 编辑:程序博客网 时间:2024/06/06 20:56
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73658227冷血之心的博客)
剑指Offer(第二版)面试题45:把数组排成最小的数
题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:我们需要定义一种新的比较大小规则,数组根据这个规则可以排成一个最小的数字。
排序规则:两个数字m和n,我们比较mn和nm的大小,来确定在新的比较规则下n和m的大小关系,来确定哪个应该排在前面
步骤:
- 将整型数组转换为String数组
- 在新的规则下对数组进行排序(本例使用了选择排序)
牛客网AC代码如下:
import java.util.ArrayList;public class Solution { public String PrintMinNumber(int [] num) {if(num==null||num.length==0) return "";int len = num.length; String[] str = new String[len]; for(int i = 0; i < len; i++){ str[i] = String.valueOf(num[i]); } for (int i = 0; i < str.length; i++) { for (int j = i+1; j < str.length; j++) {if(compare(str[i], str[j])){String temp = str[j];str[j] = str[i];str[i] = temp;}}} StringBuilder sb = new StringBuilder(); for(int i = 0;i<str.length;i++){ sb = sb.append(str[i]); } return sb.toString(); } private boolean compare(String s1,String s2){ int len = s1.length()+s2.length(); String str1 = s1+s2; String str2 = s2+s1; for (int i = 0; i < len; i++) {if(Integer.parseInt(str1.substring(i,i+1))>Integer.parseInt(str2.substring(i,i+1)))return true;if(Integer.parseInt(str1.substring(i,i+1))<Integer.parseInt(str2.substring(i,i+1)))return false;}return false; }}
关于compare方法,在for循环中,是否可以表达成这样的形式?
for (int i = 0; i < len; i++) {if(Integer.parseInt(str1.substring(i,i+1))>Integer.parseInt(str2.substring(i,i+1)))return true;elsereturn false;}答案是NO,如果写成了else形式,则如果某一位是 相等的,就不进行后边的判断,得出的新规则下的大小关系必然是错误的。
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。
阅读全文
2 1
- 剑指Offer(第二版)面试题45:把数组排成最小的数
- 剑指Offer面试题33(java版):把数组排成最小的数
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 【剑指offer】面试题33:把数组排成最小数
- 【剑指offer】面试题45:把数组排成最小的数
- 【剑指offer】面试题 45:把数组排成最小的数
- 《剑指Offer》面试题:把数组排成最小的数和qsort函数的一点介绍
- [剑指offer][面试题33]把数组排成最小的数
- 面试题33:把数组排成最小的数--《剑指offer》
- 剑指Offer:面试题33 把数组排成最小的数
- 剑指offer 面试题33—把数组排成最小的数
- 《剑指Offer》学习笔记--面试题33:把数组排成最小的数
- 《剑指Offer》面试题33:把数组排成最小的数
- 【剑指Offer学习】【面试题33:把数组排成最小的数】
- 【剑指Offer面试题】 九度OJ1504:把数组排成最小的数
- 【剑指offer】5.2时间效率——面试题33:把数组排成最小的数
- 剑指offer面试题之把数组排成最小的数
- 剑指offer-面试题33:把数组排成最小的数
- 树莓大一下期末C++期末考试题及扩展思考
- HTC Vive Unity 教程
- 【笔记】【imooc】Javascript 正则表达式(Regular Expression)
- c++之const小结-使用注意
- c++ 里各种指针
- 剑指Offer(第二版)面试题45:把数组排成最小的数
- 缓存满足的条件
- 关于axios发送两次请求
- 又遇到一坑:Cydia源之间也会冲突!A源可能会干扰B源的列表和下载,遇者小心!
- hbase shell常用操作指令
- tcp超时重传(RTO)之karn算法及其简要实验
- imgbox使用过程中遇到的问题分享
- systemd的简单使用
- Java正则 Mathcer 获取第N次出现某个字符的位置