2024-09-14:用go语言,给定一个正整数数组 nums,定义一个加密函数 encrypt(x),其将一个整数 x 的每一

2024-09-18 16:23:00 浏览数 (2)

2024-09-14:用go语言,给定一个正整数数组 nums,定义一个加密函数 encrypt(x),其将一个整数 x 的每一位数字都替换为 x 中的最大数字,然后返回加密后的数字。

例如,encrypt(523) 会返回 555,encrypt(213) 会返回 333。

现在需要计算数组中所有元素加密后的和,然后返回这个和。

输入:nums = [10,21,31]。

输出:66。

解释:加密后的元素为 [11,22,33] 。加密元素的和为 11 22 33 == 66 。

答案2024-09-14:

chatgpt

题目来自leetcode3079。

大体步骤如下:

1.对于每个输入的整数 x,从最右侧开始取每一位的数字,同时记录下最大的数字为 mx,并构建一个 base 变量,初始值为 0。

2.对 x 进行循环,每次取 x 的最后一位数字,更新 mx 和 base 的值,直到 x 为 0。

3.计算当前整数 x 加密后的值为 mx * base。

4.将每个加密后的整数值加到结果 ans 上。

5.遍历完所有输入整数后,返回结果 ans。

总体时间复杂度为 O(n*m),其中 n 是数组中整数的个数,m 是整数的位数。

额外空间复杂度为 O(1),因为只用了常数级别的额外空间。

Go完整代码如下:

代码语言:javascript复制
package main

import(
"fmt"
)

func sumOfEncryptedInt(nums []int)(ans int){
for _, x :=range nums {
        mx,base:=0,0
for; x >0; x /=10{
            mx = max(mx, x)
base=base*10 1
}
        ans  = mx *base
}
return
}

func main(){
    nums :=[]int{10,21,31}
    fmt.Println(sumOfEncryptedInt(nums))
}

Rust完整代码如下:

代码语言:javascript复制
fn max(a:i32, b:i32)->i32{
if a > b { a }else{ b }
}

fnsum_of_encrypted_int(nums:&[i32])->i32{
letmut ans=0;
for&x in nums {
let(mut mx,mut base)=(0,0);
letmut temp_x= x;
while temp_x >0{
            mx =max(mx, temp_x );
            base = base *10 1;
            temp_x /=10;
}
        ans  = mx * base;
}
    ans
}

fnmain(){
letnums=vec![10,21,31];
println!("{}",sum_of_encrypted_int(&nums));
}

0 人点赞