【LeetCode: 2578. 最小和分割 | 贪心】

在这里插入图片描述

算法题

算法刷题专栏 | 面试必备算法 | 面试高频算法
越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
作者简介:硕风和炜,CSDN-Java领域新星创作者,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享
恭喜你发现一枚宝藏博主,赶快收入囊中吧
人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?

算法题

在这里插入图片描述

【LeetCode: 2578. 最小和分割 | 贪心】_第1张图片

目录

    • 题目链接
    • ⛲ 题目描述
    • 求解思路&实现代码&运行结果
      • ⚡ 贪心
        • 求解思路
        • 实现代码
        • 运行结果
    • 共勉

题目链接

  • 2578. 最小和分割

⛲ 题目描述

给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:

num1 和 num2 直接连起来,得到 num 各数位的一个排列。
换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。
num1 和 num2 可以包含前导 0 。
请你返回 num1 和 num2 可以得到的和的 最小 值。

注意:

num 保证没有前导 0 。
num1 和 num2 中数位顺序可以与 num 中数位顺序不同。

示例 1:

输入:num = 4325
输出:59
解释:我们可以将 4325 分割成 num1 = 24 和 num2 = 35 ,和为 59 ,59 是最小和。
示例 2:

输入:num = 687
输出:75
解释:我们可以将 687 分割成 num1 = 68 和 num2 = 7 ,和为最优值 75 。

提示:

10 <= num <= 109

求解思路&实现代码&运行结果


⚡ 贪心

求解思路
  1. 题目让我们求的是如何将一个数字拆分为俩个不同的数字,数字的顺序可以打乱,也就是任意组合,最终求解的是俩个数字的最小和。
  2. 因为顺序不影响最终的结果,所以,我们先对拆分后的数组升序排序。然后对其进行组合。
  3. 怎么组合呢?也就是贪心的规律所在,俩个数差距尽可能小的原则,进行组合。
  4. 怎么实现呢?对排序后的数组遍历,从左向右,将数字挨个分配给第一个数和第二个数。最终求和的结果就是答案。
  5. 具体求解的过程步骤请看下面代码。
实现代码
class Solution {

    private char[] c;
    private int n;
    
    public int splitNum(int num) {
        this.c=String.valueOf(num).toCharArray();
        Arrays.sort(c);
        this.n=c.length;
        int num1=getNumber(0);
        int num2=getNumber(1);
        return num1+num2;
    }

    public int getNumber(int flag){
        StringBuilder sb=new StringBuilder("");
        for(int i=flag;i<c.length;i+=2){
            sb.append(c[i]+"");
        }
        return Integer.parseInt(sb.toString());
    }
}
运行结果

【LeetCode: 2578. 最小和分割 | 贪心】_第2张图片


共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

你可能感兴趣的:(LeetCode每日一题打卡,leetcode,算法,java,贪心,贪心算法)