ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-09 09:00:33  阅读:182  来源: 互联网

标签:String nums int length 整数 华为 数组 o2 o1


题目描述:

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

例如:

数组[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 }

 

标签:String,nums,int,length,整数,华为,数组,o2,o1
来源: https://www.cnblogs.com/WinterRain/p/16120812.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有