3270.求出数字答案
1.1、题目描述
给你三个 正 整数 num1
,num2
和 num3
。数字 num1
,num2
和 num3
的数字答案 key
是一个四位数,定义如下:
- 一开始,如果有数字 少于 四位数,给它补 前导 0 。
- 答案
key
的第i
个数位(1 <= i <= 4
)为num1
,num2
和num3
第i
个数位中的 最小 值。
请你返回三个数字 没有 前导 0 的数字答案。
1.2、代码实现
下面是这个问题的 C++ 代码实现:
class Solution {
public:
int generateKey(int num1, int num2, int num3) {
int ret = 0; // 最终结果 key
int tmp = 1000; // 用于定位当前位的除数
for (int i = 0; i < 4; i++) {
// 将当前的 key 向左移一位
ret *= 10;
// 获取 num1, num2, num3 当前位的值,找出最小值并添加到 key
ret += min(num1 / tmp % 10, min(num2 / tmp % 10, num3 / tmp % 10));
// 更新除数,以便获取下一位
tmp /= 10;
}
return ret;
}
};
1.3、代码详解
- 变量定义 :
ret
:存储最终生成的key
,初始值为 0。tmp
:用于定位当前处理的数字位,从千位开始,初始值为1000
。
- 循环构造 key :
- 使用一个四次循环,通过不断将
ret
向左移一位(乘以 10),来为key
逐位赋值。 - 通过表达式
num1 / tmp % 10
,我们可以提取当前位的数字值。接着使用min
函数找到num1
,num2
,num3
当前位的最小值,并将其加入到key
中。 - 最后,通过更新
tmp
(除以 10),我们可以依次处理各个位数,从千位到个位。
- 使用一个四次循环,通过不断将