【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位即可。
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
|
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”并累加。
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
|
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