刷题笔记(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 numbers) 
    {
        int size = numbers.size();
        string res;
        if(size==0)
        {
            return res;
        }
        vector container;
        for(int i=0; iB)
                {
                    string tmp = container[i];
                    container[i] = container[j];
                    container[j] = tmp;
                }
            }
        }
        
        for(int i=0; i

 

注:

关于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);

-------------------------------------------------------------------------------------------------------------------

你可能感兴趣的:(c++,data,structure,and,algorithm)