2025-04-04:求出数字答案。用go语言,给定三个正整数 num1、num2 和 num3,我们需要生成一个四位数的数字答

举报
福大大架构师每日一题 发表于 2025/04/04 07:04:07 2025/04/04
【摘要】 2025-04-04:求出数字答案。用go语言,给定三个正整数 num1、num2 和 num3,我们需要生成一个四位数的数字答案 key。这个答案的构建规则如下:1.如果数字少于四位,则在前面补充零,直到达到四位。2.key 的第 i 位(1 <= i <= 4)由 num1、num2 和 num3 对应位的最小值构成。最后,返回这个结果,不包含前导零。1 <= num1, num2, n...

2025-04-04:求出数字答案。用go语言,给定三个正整数 num1、num2 和 num3,我们需要生成一个四位数的数字答案 key。这个答案的构建规则如下:

1.如果数字少于四位,则在前面补充零,直到达到四位。

2.key 的第 i 位(1 <= i <= 4)由 num1、num2 和 num3 对应位的最小值构成。

最后,返回这个结果,不包含前导零。

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

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

输出:777。

题目来自leetcode3270。

过程描述:

  1. 输入读取

    • 首先,我们接收三个正整数 num1num2num3。假设输入的值为 num1 = 987num2 = 879num3 = 798
  2. 初始化变量

    • 创建一个变量 key 用于存储最终生成的四位数答案,初始值为 0。
    • 初始变量 p 设为 1,用于确定当前位的权重(个位、十位、百位、千位)。
  3. 逐位处理

    • 通过循环,检查 num1num2num3 的数字位,直到所有数字都被处理完(即为 0)。
    • 在每次迭代中,取 num1num2num3 的当前个位数字(使用取模运算 %)。如果某一个数字已经没有更多的数字位(已为0),则该位默认为0。
  4. 计算当前位的最小值

    • 在每次迭代中,计算这三个数字的当前个位的最小值,并将其乘以权重 p 加到 key 中。
    • 更新 p,使其乘以 10,以便于在下一次迭代时处理更高的位。
  5. 向右移动数字

    • 使用整数除法(/)将 num1num2num3 右移一位,即去掉其当前的个位数字(进行整除)。
  6. 循环结束

    • 循环结束后,若 key 还不足四位则会自动补零到四位,这种补零的过程可以通过调整处理过程中的逻辑来完成。
  7. 返回结果

    • 最后,返回计算得到的四位数答案 key

复杂度分析:

  • 时间复杂度

    • 由于每个数字最多有 4 位(1 <= num1, num2, num3 <= 9999),循环最多执行 4 次。因此,时间复杂度为 O(1)。
  • 空间复杂度

    • 该算法只使用了固定数量的额外变量来存储结果和临时值(如 keyp)。因此,空间复杂度也是 O(1)。

总结:该程序高效地生成了四位数答案,时间和空间复杂度均为常量级 O(1)。

Go完整代码如下:

package main

import (
	"fmt"
)

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

func main() {
	num1 := 987
	num2 := 879
	num3 := 798
	result := generateKey(num1,num2,num3)
	fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

def min_value(a, b, c):
    return min(a, min(b, c))

def generate_key(num1, num2, num3):
    key = 0
    p = 1
    
    while num1 > 0 or num2 > 0 or num3 > 0:
        digit1 = num1 % 10 if num1 > 0 else 0
        digit2 = num2 % 10 if num2 > 0 else 0
        digit3 = num3 % 10 if num3 > 0 else 0
        
        key += min_value(digit1, digit2, digit3) * p
        
        num1 //= 10
        num2 //= 10
        num3 //= 10
        p *= 10
    
    return key

if __name__ == "__main__":
    num1 = 987
    num2 = 879
    num3 = 798
    result = generate_key(num1, num2, num3)
    print(result)

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。