解决leetcode第3309题连接二进制表示可形成的最大数值

难度:中等

问题描述:

给你一个长度为 3 的整数数组 nums。

现以某种顺序连接数组nums 中所有元素的二进制表示 ,请你返回可以由这种方法形成的 最大数值。

注意:任何数字的二进制表示不含前导零。

示例 1:

输入: nums = [1,2,3]

输出: 30

解释:

按照顺序 [3, 1, 2] 连接数字的二进制表示,得到结果 "11110",这是 30 的二进制表示。

示例 2:

输入: nums = [2,8,16]

输出: 1296

解释:

按照顺序 [2, 8, 16] 连接数字的二进制表述,得到结果 "10100010000",这是 1296 的二进制表示。

提示:

nums.length == 3

1 <= nums[i] <= 127

解决问题思路:

既然要得到以某种顺序连接数组nums中所有元素的二进制表示的最大值,首先是将整数数组nums转化成二进制数组,然后得到这三个二进制整数形成的全排列,再找出其中的最大值输出,即解决问题。为此生成了三个函数:

1、函数covert(n)

功能:将一个整数n转换为字符串形式的二进制数并返回

2、函数fulllist(a)

功能:返回二进制数组元素的全排列

3、函数myint(s)

功能:将一个字符串形式的二进制整数s转换为对应的十进制数返回

程序如下:

#将一个整数n转换为一个字符串形式的二进制数并返回
def covert(n):
    b=bin(n)[2:]
    return b

#对于有三个字符元素的列表a,返回其组成的全排列
def fulllist(a):
    return [a[0]+a[1]+a[2],a[0]+a[2]+a[1],a[1]+a[0]+a[2],a[1]+a[2]+a[0],a[2]+a[0]+a[1],a[2]+a[1]+a[0]]

#将一个字符串的二进制数转换为十进制整数
def myint(s):
    return int(s,2)

#以下为正式解决过程
#输入原始整数数组
nums=eval(input('pls input nums='))

#将nums整数列表转换为对应的二进制列表
nums=list(map(covert,nums))

#获得二进制列表形成的全排列
nums=fulllist(nums)

#将全排列的二进制列表数据转换为对应的十进制数列表
nums=list(map(myint,nums))

#打印其中的最大值
print(max(nums))

运行实例1:

pls input nums=[1,2,3]

30

运行实例2:

pls input nums=[3,6,9]

489

运行实例3:

pls input nums=[2,8,16]

1296

感悟:

要多去看一下leetcode中的题目,多多训练思维。人不学就落后,刀不磨就生锈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值