[32]把数组排成最小的数
来源:互联网 发布:ps二维码源码 编辑:程序博客网 时间:2024/06/05 22:17
[32.]把数组排成最小的数
时间限制:1秒
空间限制:32768K
本题知识点: 数组
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
牛客网题目链接:点击这里
VS2010代码:
#include<iostream>#include<vector>using namespace std;class Solution {public: string PrintMinNumber(vector<int> numbers) { string str; //用来存储最后返回值 //将数字转化为字符存储起来 if(numbers.empty()) return str; vector<string> Nums; for(int i=0; i!=numbers.size(); i++) { Nums.push_back(int2str(numbers[i])); } //快速排序将str正确排序。 strQuickSort(Nums, 0, Nums.size()-1); //将字符串串起来 for(int i=0; i<Nums.size(); i++) { str.append(Nums[i]); } return str; } string int2str(int n) { //输入一个正整数,将其转换为字符串 string str; int length=0; int base=1; int temp=n; while(temp) { if(temp>10) base=base*10; length++; temp=temp/10; } str.resize(length); for(int i=0; i<length; i++) { //cout<<(n/base)%10; str[i]=(n/base)%10+'0'; base=base/10; } return str; } //两个字符串的比较 bool IsBegerThan(const string &str1, const string &str2) { //假设不存在,3和33的这种类似情况 int i=0,j=0; while(i!=str1.size() && j!=str2.size()) { if(str1[i]<str2[j]) return 0; if(str1[i]>str2[j]) return 1; if(str1[i]==str2[j]) { if(i+1==str1.size() && j+1!=str2.size()) j++; else if(i+1!=str1.size() && j+1==str2.size()) i++; else {i++;j++;} } } return 0; //相等的情况计入<=0; } //改进的字符串的快速排序 void strQuickSort(vector<string> &nums, int begin, int end) {//选取第一个字符串作为枢纽元 if(begin>=end) return; string viot=nums[begin]; int pBegin=begin; int pEnd=end; while(pBegin!=pEnd) { //枢纽元左边为小于等于,右边均大于 while(pBegin!=pEnd && IsBegerThan(nums[pEnd], viot)) pEnd--; while(pBegin!=pEnd && !IsBegerThan(nums[pBegin], viot)) pBegin++; if(pBegin!=pEnd) swap(nums[pBegin],nums[pEnd]); } if(begin!=pEnd) swap(nums[begin],nums[pEnd]); strQuickSort(nums,begin,pEnd-1); strQuickSort(nums,pEnd+1,end); }};int main(){ Solution s1; //string str; //vector<int> test1; //int int1=3; //int int2=32; //int int3=321; //test1.push_back(int1); //test1.push_back(int2); //test1.push_back(int3); //str=s1.PrintMinNumber(test1); //for(int i=0; i<str.size(); i++) // cout<<str[i]; vector<string> str; string str1="3"; string str2="32"; string str3="321"; ////string str4="31"; ////string str5="321"; //str.push_back(str1); //str.push_back(str2); //str.push_back(str3); ////str.push_back(str4); ////str.push_back(str5); //s1.strQuickSort(str,0,2); ////string str3; ////str3=str1.append(str2); //for(int i=0; i<str.size(); i++) //{ // for(int j=0; j<str[i].size(); j++) // cout<<str[i][j]; // cout<<endl; //} cout<<s1.IsBegerThan(str2,str3)<<endl;}
牛客网通过图片:
0 0
- [32]把数组排成最小的数
- 32、把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- hdu 5739(点双连通)
- 题目204 Coin Test
- SQLyong的安装及使用
- js yield和Generator 函数
- 一个网站空间绑定多个域名指向不同路径方法
- [32]把数组排成最小的数
- Hbase常用命令
- Hadoop2.2.0集群搭建
- 强执行力领导者的七大特质
- Ubuntu下搭建PIXHAWK开发环境
- 配置Jstl的Maven依赖
- 溢出警告
- hdu 5740(构造,KM)
- ARM WFI和WFE指令