刷题笔记(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);

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

猜你喜欢

转载自blog.csdn.net/zj1131190425/article/details/88956639