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

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

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

给你三个 整数 num1num2num3

数字 num1num2num3 的数字答案 key 是一个四位数,定义如下:

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

请你返回三个数字 没有 前导 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) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
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
java 复制代码
/*
 * @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) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

Python
python 复制代码
'''
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
go 复制代码
/*
 * @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

相关推荐
BB_CC_DD17 分钟前
四. 以Annoy算法建树的方式聚类清洗图像数据集,一次建树,无限次聚类搜索,提升聚类搜索效率。(附完整代码)
深度学习·算法·聚类
梁下轻语的秋缘2 小时前
每日c/c++题 备战蓝桥杯 ([洛谷 P1226] 快速幂求模题解)
c++·算法·蓝桥杯
CODE_RabbitV2 小时前
【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)
算法
mit6.8242 小时前
[贪心_7] 最优除法 | 跳跃游戏 II | 加油站
数据结构·算法·leetcode
keep intensify2 小时前
通讯录完善版本(详细讲解+源码)
c语言·开发语言·数据结构·算法
shix .2 小时前
2025年PTA天梯赛正式赛 | 算法竞赛,题目详解
数据结构·算法
风铃儿~3 小时前
Java面试高频问题(26-28)
java·算法·面试
wuqingshun3141593 小时前
蓝桥杯 4. 卡片换位
算法·职场和发展·蓝桥杯
江沉晚呤时3 小时前
深入了解C# List集合及两种常见排序算法:插入排序与堆排序
windows·sql·算法·oracle·c#·排序算法·mybatis
Eric.Lee20213 小时前
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
人工智能·算法·yolo·目标检测·计算机视觉