2025-04-04:求出数字答案。用go语言,给定三个正整数 num1、num2 和 num3,我们需要生成一个四位数的数字答
        【摘要】 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。
过程描述:
- 
输入读取: - 首先,我们接收三个正整数 num1、num2和num3。假设输入的值为num1 = 987、num2 = 879、num3 = 798。
 
- 首先,我们接收三个正整数 
- 
初始化变量: - 创建一个变量 key用于存储最终生成的四位数答案,初始值为 0。
- 初始变量 p设为 1,用于确定当前位的权重(个位、十位、百位、千位)。
 
- 创建一个变量 
- 
逐位处理: - 通过循环,检查 num1、num2和num3的数字位,直到所有数字都被处理完(即为 0)。
- 在每次迭代中,取 num1、num2和num3的当前个位数字(使用取模运算%)。如果某一个数字已经没有更多的数字位(已为0),则该位默认为0。
 
- 通过循环,检查 
- 
计算当前位的最小值: - 在每次迭代中,计算这三个数字的当前个位的最小值,并将其乘以权重 p加到key中。
- 更新 p,使其乘以 10,以便于在下一次迭代时处理更高的位。
 
- 在每次迭代中,计算这三个数字的当前个位的最小值,并将其乘以权重 
- 
向右移动数字: - 使用整数除法(/)将num1、num2和num3右移一位,即去掉其当前的个位数字(进行整除)。
 
- 使用整数除法(
- 
循环结束: - 循环结束后,若 key还不足四位则会自动补零到四位,这种补零的过程可以通过调整处理过程中的逻辑来完成。
 
- 循环结束后,若 
- 
返回结果: - 最后,返回计算得到的四位数答案 key。
 
- 最后,返回计算得到的四位数答案 
复杂度分析:
- 
时间复杂度: - 由于每个数字最多有 4 位(1 <= num1, num2, num3 <= 9999),循环最多执行 4 次。因此,时间复杂度为 O(1)。
 
- 
空间复杂度: - 该算法只使用了固定数量的额外变量来存储结果和临时值(如 key和p)。因此,空间复杂度也是 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)