LeetCode_2160. 拆分数位后四位数字的最小和_java

devtools/2024/10/24 12:30:39/

1、问题

2160. 拆分数位后四位数字的最小和icon-default.png?t=O83Ahttps://leetcode.cn/problems/minimum-sum-of-four-digit-number-after-splitting-digits/

给你一个四位 正 整数 num 。请你使用 num 中的 数位 ,将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 ,且 num 中 所有 数位都必须使用。

    比方说,给你 num = 2932 ,你拥有的数位包括:两个 2 ,一个 9 和一个 3 。一些可能的 [new1, new2] 数对为 [22, 93],[23, 92],[223, 9] 和 [2, 329] 。

请你返回可以得到的 new1 和 new2 的 最小 和。

示例 1:

输入:num = 2932
输出:52
解释:可行的 [new1, new2] 数对为 [29, 23] ,[223, 9] 等等。
最小和为数对 [29, 23] 的和:29 + 23 = 52 。

示例 2:

输入:num = 4009
输出:13
解释:可行的 [new1, new2] 数对为 [0, 49] ,[490, 0] 等等。
最小和为数对 [4, 9] 的和:4 + 9 = 13 。

提示:

    1000 <= num <= 9999

2、题解

(1)思路:

num是一个四位正整数,那肯定能拿到num的 4 个数字(千位、百位、十位、个位),要将这 4 个数字组合一下。

要想组合成的两个数字,加起来最小,那数字肯定是越短越好,比如num=1234,那拆成12 和 34, 肯定比123 和 4 加起来的和小,因此,问题就转换为了“将4个数字,组成2个两位数的数字”。

那怎么才能使得这 2 个两位数的和最小呢?那就要保证十位要尽量小!那现在答案就出来啦,因为只要确定了两个十位数是较小的两个数,那剩下的两个较大的数,就是个位数啦!比如num=1234,取1、2作为十位数,3、4作为个位数,组成13 和 24(或者14 和 23,求和结果是一样的)。

(2)步骤:

1. 将a、b、c、d分别保存num的千位、百位、十位、个位;

2. 将a、b、c、d按照从小到大排序,排序结果保存到a、b、c、d中(此时 a < b < c < d);

3. 将两位较小的数(a 、b)作为十位,两位较大的数(c 、d)作为个位,即可得出结果

(3)代码:

代码1:

java">class Solution {public int minimumSum(int num) {int a, b , c, d;//1.将a、b、c、d分别保存千位、百位、十位、个位//千位a = num / 1000;num = num % 1000;//百位b = num / 100;num = num % 100;//十位c = num / 10;//个位d = num % 10;//2.给a、b、c、d,按照从小到大排序int[] digits  = new int[]{a, b, c, d};//使用冒泡排序,将数组从小到大排序for(int i = 0; i< 3; i++) {for(int j=0; j<3-i; j++) {if(digits [j] > digits [j+1]) {int temp = digits [j+1];digits [j+1] = digits [j];digits [j] = temp;}}}//将a、b、c、d分别保存从小到大的四位数a = digits [0];b = digits [1];c = digits [2];d = digits [3];//3.两位较小的数作为十位,两位较大的数作为个位,想加即得结果return a * 10 + b * 10 + c + d; }
}

代码2:排序不自己手写啦,可以用sort函数直接排序(不过这个耗时很多,个人觉得不如自己手写排序算法好)

java">class Solution {public int minimumSum(int num) {int a, b , c, d;//1.将a、b、c、d分别保存千位、百位、十位、个位//千位a = num / 1000;num = num % 1000;//百位b = num / 100;num = num % 100;//十位c = num / 10;//个位d = num % 10;//2.给a、b、c、d,按照从小到大排序int[] digits  = new int[]{a, b, c, d};Arrays.sort(digits);//将a、b、c、d分别保存从小到大的四位数a = digits [0];b = digits [1];c = digits [2];d = digits [3];//3.两位较小的数作为十位,两位较大的数作为个位,想加即得结果return a * 10 + b * 10 + c + d; }
}


http://www.ppmy.cn/devtools/128452.html

相关文章

数据结构 - 树,再探

书节上回&#xff0c;我们接着聊二叉树&#xff0c;N叉树&#xff0c;以及树的存储。 01满二叉树 如果一个二叉树&#xff0c;除最后一层节点外&#xff0c;每一层的节点数都达到最大值&#xff0c;即每个节点都有两个子节点&#xff0c;同时所有叶子节点都在最后一层&#xf…

基于大模型框架langchain中的faiss向量数据库的应用与完整代码实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下基于大模型框架langchain中的faiss向量数据库的应用与完整代码实现。首先&#xff0c;我们提供了数据样例&#xff0c;并将其输入到向量数据库中。随后&#xff0c;通过相似度查找功能&#xff0c;实现了对数据的快…

LeetCode--第N个泰波那契数--动态规划

一、题目解析 大家应该都知道斐波那契数&#xff0c;这道题就是利用斐波那契模型解决问题的。 二、代码解析 值得注意的是&#xff0c;这道题利用递归解决会超时。

Python Q-learning 算法详解与应用案例

目录 Python Q-learning 算法详解与应用案例引言一、Q-learning 的基本原理1.1 强化学习基础1.2 Q值及其更新1.3 Q-learning 的特性 二、Python 中 Q-learning 的面向对象实现2.1 QTable 类的实现2.2 Environment 类的实现2.3 Agent 类的实现 三、案例分析3.1 简单环境中的 Q-l…

康养实训室有哪些实训项目?

康养实训室作为专门为老年人设计的集健康管理、康复训练、心理咨询、社交活动于一体的综合性场所&#xff0c;近年来在职业院校和养老机构中得到了广泛应用。它不仅提供医疗和健康服务&#xff0c;还通过多种多样的活动来促进老年人的身心健康。本文将详细介绍康养实训室中的各…

推荐一款多显示器管理工具:DisplayMagician

DisplayMagician是一款开源工具&#xff0c;专为Windows用户设计&#xff0c;能够通过一个快捷方式轻松自动配置屏幕和声音。它特别适合游戏玩家和应用程序用户&#xff0c;可以实现屏幕配置、声音设备切换以及启动额外程序等功能&#xff0c;最后在游戏或应用程序关闭时&#…

STM32G474之“运放OPAMP和ADC”以及“ADC和DMA”问题

在使用STM32G474之“运放OPAMP和ADC”&#xff0c;或“ADC和DMA”时&#xff0c;要注意一下几个问题。如果有有标准库&#xff0c;就不会用HAL库了。不是没有吗&#xff1f;凑合用吧。 问题1、将“DAC3通道1”通过内部连接到"运放OPAMP1"&#xff0c;运放输出到引脚…

洛谷官方题单——【算法1-1】模拟与高精度

目录 [NOIP2003 普及组] 乒乓球题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解 [NOIP2015 普及组] 扫雷游戏题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示题解 [NOIP2016 提高组] 玩具谜题题目…