刷题笔记(2) 将数组中的数字组合成一个最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
将数组中的数字拿出来,先转换为字符串。对于数组中相邻的两个字符串,例如: 32,321,因为
stringA = 32+321 = 32321
stringB = 321+32 = 32132
且stringA > stringB
所以为了得到最小的数字,需要将32和321调换位置。
对数组中所有的字符串都执行相同的操作即可。 本题目相当于重新定义了一种新的排序方法:
代码:
class Solution {
public:
string PrintMinNumber(vector<int> numbers)
{
int size = numbers.size();
string res;
if(size==0)
{
return res;
}
vector<string> container;
for(int i=0; i<size; i++)
{
stringstream ss;
ss << numbers[i];
string num2str = ss.str();
container.push_back(num2str);
}
for(int i=0; i<size-1; i++)
{
for(int j=i+1; j<size; j++)
{
string A = container[i] + container[j];
string B = container[j] + container[i];
if(A>B)
{
string tmp = container[i];
container[i] = container[j];
container[j] = tmp;
}
}
}
for(int i=0; i<size; i++)
{
res.append(container[i]);
}
return res;
}
};
注:
关于c++中数字和字符串的相互转化问题:
1.将数字转化为字符串:
a. 通过stringstream
int a = 100;
stringstream ss;
ss << a;
string str_a = ss.str(); // 将a转化为字符串
b.通过C++11提供的to_string方法:
std::string to_string(int value);
std::string to_string(long int value);
std::string to_string(long long int value);
std::string to_string(unsigned int value);
std::string to_string(unsigned long long int value);
2. 将字符串转化为数字
a. c++11提供了字符串(char*)转换为整数和浮点类型的方法:
atoi: 将字符串转换为 int
atol: 将字符串转换为long
atoll:将字符串转换为 long long
atof: 将字符串转换为浮点数
b. 还提供了stoxxx方法,将string转换为各种类型的数据:
std::string str = "1000";
int val = std::stoi(str);
long val = std::stol(str);
float val = std::stof(str);
-------------------------------------------------------------------------------------------------------------------