华为手撕代码:数组转最大整数

题目描述:

给定一个正整数数组,返回该数组能够拼接成的最大整数,不可拆分数组中的数字

例如:

数组[3,30,34,5,9]能够组成的最大整数为9534330

数组[10,101011,34,5,9]能够组成的最大整数为953410101110

解析:

☆要点一:要实现一个字符串比较器

☆要点二:要实现递归比较,以应对3vs30、10vs101011这种情况

代码实现:

1 package com.test.od; 2 3 import java.util.Arrays; 4 import java.util.Comparator; 5 6 public class OD3 { 7 // 10110 10 8 public static String generateMaxNum(int[] nums){ 9 String[] numsStr = new String[nums.length]; 10 for (int i = 0; i < nums.length; i++){ 11 numsStr[i] = String.valueOf(nums[i]); 12 } 13 Arrays.sort(numsStr, new Comparator<String>() { 14 @Override 15 public int compare(String o1, String o2) { 16 int minLen = Math.min(o1.length(), o2.length()); 17 int maxLen = Math.max(o1.length(), o2.length()); 18 // 递归次数 19 int times = maxLen / minLen + 1; 20 // 把较短的字符串自我复制times次以递归比较 21 if (o1.length() < o2.length()){ 22 StringBuilder builder = new StringBuilder(); 23 for (int i = 0; i < times; i++){ 24 builder.append(o1); 25 } 26 o1 = builder.toString().substring(0, maxLen); 27 }else { 28 StringBuilder builder = new StringBuilder(); 29 for (int i = 0; i < times; i++){ 30 builder.append(o2); 31 } 32 o2 = builder.toString().substring(0, maxLen); 33 } 34 // 处理后的两字符串长度相等,开始倒序比较 35 for (int i = 0; i < maxLen; i++){ 36 if (o1.charAt(i) > o2.charAt(i)){ 37 return -1; 38 }else if (o1.charAt(i) < o2.charAt(i)){ 39 return 1; 40 } 41 } 42 return 0; 43 } 44 }); 45 StringBuilder resBuilder = new StringBuilder(); 46 for (String numStr : numsStr){ 47 resBuilder.append(numStr); 48 } 49 return resBuilder.toString(); 50 } 51 52 public static void main(String[] args) { 53 // int[] nums = {3,30,34,5,9}; 54 int[] nums = {10,101011,34,5,9}; 55 System.out.println(generateMaxNum(nums)); 56 } 57 }

 


__EOF__

本文作者心若向阳,无畏悲伤
本文链接https://www.cnblogs.com/WinterRain/p/16120812.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   .有梦想的咸鱼丶  阅读(290)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示