输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2017-07-24 21:54
1401 查看
剑指offer:输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:两个数比较,哪个更适合放在前面,可以将两个数拼起来,谁放在前面,拼起来的数小,谁就更适合放在前面。
关键是要会用,stringstream做int和string的转换,还要会用sort排序。
代码如下: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <vector> #include <sstream> #include <functional> #include <algorithm> using namespace std; bool less_second(const string &s1,const string &s2){ string str1 = s1 + s2; string str2 = s2 + s1; return str1 < str2; } class Solution { public: string PrintMinNumber(vector<int> numbers) { int length = numbers.size(); string result; if(length <= 0) return result; vector<string> strVec; //利用stringstream将int转换为sting for(int i = 0; i < length; i++){ stringstream ss; string str; ss << numbers.at(i); ss >> str; strVec.push_back(str); } sort(strVec.begin(),strVec.end(),less_second);//排序函数,第三个参数默认是less,但是可以自己指定函数指针 for(int i = 0; i < length; i++){ result += strVec.at(i); } return result; } }; int main(){ int a[] = {32,3,321}; vector<int> myVec(&a[0],&a[3]); vector<string> strVec; Solution s; string result = s.PrintMinNumber(myVec); return 0; }
相关文章推荐
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。剑指Offer(32)
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- Comparator 实现集合中元素的比较.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这321323
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个
- 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
- 项目39.3-1输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 解答: 分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解
- 对整数数组里所有的数字拼接起来,输出最小的一个
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。求s=a+aa+aaa+aaaa+…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加
- offer33.打印能拼接出的所有数字中最小的一个
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{