输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
2016-11-22 15:02
661 查看
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
//
#include "stdafx.h" #include <iostream> #include <vector> #include <string> #include<sstream> #include <deque> using namespace std; class Solution { public: string PrintMinNumber(vector<int> numbers) { string str; for (int i = 0; i < numbers.size(); ++i) { for (int j = i + 1; j < numbers.size(); ++j) { int temp = CompareNums(numbers[i],numbers[j]); if (temp == numbers[i])continue;//如果num的值就是结果值,返回继续循环 numbers[j] = numbers[i]; numbers[i] = temp; } } for (int i = 0; i < numbers.size(); ++i) { stringstream stream; //这块用到类型转换!!!!!!!!!!!!! stream << numbers[i];//注意复习C++中类型转换!!!!!!!!!!! str += stream.str(); stream.clear(); } cout << "str:" << str << endl; return str; } int CompareNums(int num1,int num2)//选出两个数中位数较高的数字,比较小的那个数 { deque <int> deq1; deque <int> deq2; deque <int> deq11;//辅助队列, 当num1在前面时 deque <int> deq22;//辅助队列,当num2在前面时 int copyNum1 = num1; int copyNum2 = num2; int num3=num1;//辅助数字,当num3等于0的时候返回哪个数字都可以,最好返回小的数字 while (copyNum1!=0) { deq1.push_front(copyNum1 % 10); deq11.push_front(copyNum1 % 10); // cout << "copyNum1%10:" << copyNum1 % 10 << endl; copyNum1 = copyNum1 / 10; } while (copyNum2 != 0) { deq2.push_front(copyNum2 % 10); deq22.push_front(copyNum2 % 10); // cout << "copyNum2%10:" << copyNum2 % 10 << endl; copyNum2 = copyNum2 / 10; } while (!deq2.empty()) { deq11.push_back(deq2.front()); deq2.pop_front(); } while (!deq1.empty ()) { deq22.push_back(deq1.front()); deq1.pop_front(); } cout << "deq11:"; for (auto it = deq11.begin(); it != deq11.end(); ++it) cout << *it; cout << endl; cout << "deq22:"; for (auto it = deq22.begin(); it != deq22.end(); ++it) cout << *it; cout << endl; while (!deq11.empty()&&!deq22.empty())//两者都不为空,两者长度肯定都是相等的 { if (deq11.front() < deq22.front()) { num3 = num1; break; } else if (deq11.front() > deq22.front()) { num3 = num2; break; } else { deq11.pop_front(); deq22.pop_front(); } } return num3; } }; int main() { Solution so; vector<int> vec = { 3,32,321 }; string str = so.PrintMinNumber(vec); /*cout << "结果是:" << endl; int num3 = so.CompareNums(123, 121); cout << "num3:" << num3 << endl;*/ 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。
- Comparator 实现集合中元素的比较.输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这321323
- 输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个
- 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
- 项目39.3-1输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
- 对整数数组里所有的数字拼接起来,输出最小的一个
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 将一个正整数分解质因数。例如:输入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的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3