当前位置: 首页 > 后端技术 > Java

LeetCode-179-MaximumNumber

时间:2023-04-01 17:41:48 Java

MaximumNumber题目描述:给定一组非负整数nums,重新排列每个数(每个数不能拆分)的顺序,形成一个最大的整数。注意:输出可能非常大,因此您需要返回一个字符串而不是一个整数。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:数组排序首先,对给定的nums进行sorting排序。排序逻辑是通过一个比较器实现的,就是比较两个数的正向连接和反向连接,哪个大,然后对排序后的数进行排序。数组可以串联。备注:逻辑比较清晰,但是提交了几次才成功。主要遇到以下两个问题:没有考虑大数的情况,使用Integer导致越界,改成Long是正确的;不考虑串接号码前缀的0没有意义,需要去掉。这两点很基础,以后注意。importjava.util.Arrays;publicclassLeetCode_179{publicstaticStringlargestNumber(int[]nums){String[]numsStr=newString[nums.length];for(inti=0;i{if(Long.valueOf(o1+o2)>Long.valueOf(o2+o1)){返回1;}elseif(Long.valueOf(o1+o2)=0;i--){result.append(numsStr[i]);}//找到第一个不为0的数字intindex=0;for(charc:result.toString().toCharArray()){if(c!='0'){中断;}索引++;}返回索引==result.length()?"0":result.substring(index);}publicstaticvoidmain(String[]args){int[]nums=newint[]{10,2};//测试用例1,预期输出:210System.out.println(largestNumber(nums));int[]nums2=newint[]{3,30,34,5,9};//测试用例2,预期输出:9534330System.out.println(largestNumber(nums2));int[]nums3=newint[]{999999991,9};//测试用例3,预期输出:9999999991//考虑越界问题System.out.println(largestNumber(nums3));int[]nums4=newint[]{0,0};//测试用例4,预期输出:0//考虑结果中的前缀0System.out.println(largestNumber(nums4));}}[Daily留言】不再沉默在沉默中爆发,在沉默中灭亡