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)