算法笔试题——N个正整数联接,组成最小的长整数

最近在刷算法笔试题,遇到这样一道题: 设有N个正整数,将它们连接成一排,组成一个最小的多位整数。 问题分析: 1、要保证连接的多位整数最小,这就需要比较N个整数的各个位数。另外考虑到最终结果是这些数的连接。首先,将这些数转化为字符串,更容易操作。 2、接下来考虑的是这些字符串的排序问题,也就是如何确定两个整数的字符串的前后位置。 首先考虑简单的情况:23和32,肯定23在前,
摘要由CSDN通过智能技术生成

最近在刷算法笔试题,遇到这样一道题:
设有N个正整数,将它们连接成一排,组成一个最小的多位整数。
问题分析:
1、要保证连接的多位整数最小,这就需要比较N个整数的各个位数。另外考虑到最终结果是这些数的连接。首先,将这些数转化为字符串,更容易操作。
2、接下来考虑的是这些字符串的排序问题,也就是如何确定两个整数的字符串的前后位置。
首先考虑简单的情况:23和32,肯定23在前,32在后,组成的数更小。因此,相同位数的整数,较小的数排在前;
接下来,考虑不相同位数的数:
(1) 23和221,先看前两位,221较小,因此排在前面;
(2) 23和231,前两位相同。组成的数字23|231和231|23的前两位也相同,关键是第3位,也就是231中的最高位和第3位,最高位大于第三位,因此231排在前,才能保证第三位为1
(3) 同理,23和234,234的的最高位小于第三位,因此234排在后面,23|234更小。
基于以上的规律,现给出具体的算法(C++实现)

#include<iostream>
#include<stdlib.h>
#include<string.h>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值