3270.求出数字答案

【LetMeFly】3270.求出数字答案:每位分别计算 或 for循环

力扣题目链接:https://leetcode.cn/problems/find-the-key-of-the-numbers/

给你三个  整数 num1 ,num2 和 num3 。

数字 num1 ,num2 和 num3 的数字答案 key 是一个四位数,定义如下:

  • 一开始,如果有数字 少于 四位数,给它补 前导 0
  • 答案 key 的第 i 个数位(1 <= i <= 4)为 num1 ,num2 和 num3 第 i 个数位中的 最小 值。

请你返回三个数字 没有 前导 0 的数字答案。

 

示例 1:

输入:num1 = 1, num2 = 10, num3 = 1000

输出:0

解释:

补前导 0 后,num1 变为 "0001" ,num2 变为 "0010" ,num3 保持不变,为 "1000" 。

  • 数字答案 key 的第 1 个数位为 min(0, 0, 1) 。
  • 数字答案 key 的第 2 个数位为 min(0, 0, 0) 。
  • 数字答案 key 的第 3 个数位为 min(0, 1, 0) 。
  • 数字答案 key 的第 4 个数位为 min(1, 0, 0) 。

所以数字答案为 "0000" ,也就是 0 。

示例 2:

输入: num1 = 987, num2 = 879, num3 = 798

输出:777

示例 3:

输入:num1 = 1, num2 = 2, num3 = 3

输出:1

 

提示:

  • 1 <= num1, num2, num3 <= 9999

解题方法一:每一位分别计算

如何取出a的百分位?a / 100 % 10即可。

依次取出三个数十进制下的低4位即可。

  • 时间复杂度$O(1)$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
private:
int min3(int a, int b, int c) {
return min(min(a, b), c);
}
public:
int generateKey(int num1, int num2, int num3) {
return 1000 * min3(num1 / 1000, num2 / 1000, num3 / 1000) +
100 * min3(num1 / 100 % 10, num2 / 100 % 10, num3 / 100 % 10) +
10 * min3(num1 / 10 % 10, num2 / 10 % 10, num3 / 10 % 10) +
min3(num1 % 10, num2 % 10, num3 % 10);
}
};

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* @Author: LetMeFly
* @Date: 2025-01-13 23:45:59
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-01-13 23:48:54
*/
class Solution {
private int get(int num1, int num2, int num3, int dev) {
return Math.min(num1 / dev % 10, Math.min(num2 / dev % 10, num3 / dev % 10));
}

public int generateKey(int num1, int num2, int num3) {
return get(num1, num2, num3, 1000) * 1000 +
get(num1, num2, num3, 100) * 100 +
get(num1, num2, num3, 10) * 10 +
get(num1, num2, num3, 1);
}
}

解题方法二:for循环

在三个数字都不为零时,依次取出三个数的最后一位,将最小值乘以这一位对应的“weight”并累加。

  • 时间复杂度$O(1)$
  • 空间复杂度$O(1)$

AC代码

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'''
Author: LetMeFly
Date: 2025-01-11 22:29:38
LastEditors: LetMeFly.xyz
LastEditTime: 2025-01-11 22:31:40
'''
class Solution:
def generateKey(self, num1: int, num2: int, num3: int) -> int:
ans = 0
p = 1
while num1 and num2 and num3:
ans += p * min(num1 % 10, num2 % 10, num3 % 10)
num1 //= 10
num2 //= 10
num3 //= 10
p *= 10
return ans

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* @Author: LetMeFly
* @Date: 2025-01-13 23:49:56
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-01-13 23:52:27
*/
package main


func min_FKN(a, b, c int) int {
if a > b {
a = b
}
if a > c {
a = c
}
return a
}

func generateKey(num1 int, num2 int, num3 int) (ans int) {
p := 1
for num1 + num2 + num3 > 0 {
ans += min_FKN(num1 % 10, num2 % 10, num3 % 10) * p
p *= 10
num1, num2, num3 = num1 / 10, num2 / 10, num3 / 10
}
return
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/145126790


3270.求出数字答案
https://blog.letmefly.xyz/2025/01/13/LeetCode 3270.求出数字答案/
作者
Tisfy
发布于
2025年1月13日
许可协议