难度:中等
问题描述:
给你一个长度为 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转换为对应的十进制数返回
程序如下:
python">#将一个整数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中的题目,多多训练思维。人不学就落后,刀不磨就生锈。