60291253去掉三个数字最小的数是?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了60291253去掉三个数字最小的数是?相关的知识,希望对你有一定的参考价值。

60291253去掉三个数字最小的数是(60212)
思路分析:要保证数字有意义,首位数字不能为0,6必须保留;要让留下的数字最小,就要去掉除了首位数6以外最大的3个数字9、5、3,所以答案为60212。
参考技术A 60291253去掉三个数字最小的数是1。 参考技术B 你要把数字从小到大排列,
0.1.2.2.3.5.6.9
去掉3个大的
得到0.1.2.2.3
但是0不能放第一个
所以应该是10223
参考技术C 如果按照前后顺序去掉的话应该去掉629。剩下01253。读数是1253. 1253应该是最小的数了。 参考技术D 去掉三个数,挑最大去掉分别是695
剩下02123
最小的是10223

把数组排成最小的数

把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

Input: [3,32,321]

Output : “321323”

class Solution {
public:
    //自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面
    bool isSmaller(string s1, string s2)
    {
        for(int i=0; i<s1.length(); ++i)
        {
            if(s1[i]<s2[i])
                return true;
            else if(s1[i]>s2[i])
                return false;
        }
        return true;
    }
    string PrintMinNumber(vector<int> numbers) {
        if(numbers.size()==0)
            return "";
        vector<string> strVec;
        string res;
        for(int i=0; i<numbers.size(); ++i)           //先int转化为string
        {
            string str = to_string(numbers[i]);
            strVec.push_back(str);
        }
        for(int i=0; i<strVec.size(); ++i)
        {
            for(int j=i+1; j<strVec.size(); ++j)
            {
                string sum1 = strVec[i] + strVec[j];
                string sum2 = strVec[j] + strVec[i];
                if(!isSmaller(sum1, sum2))            //根据自定义规则调整顺序
                {
                    string temp = strVec[i];
                    strVec[i].resize(strVec[j].size());
                    strVec[i] = strVec[j];
                    strVec[j] = temp;
                }
            }
            res += strVec[i];                         //比较一轮后,i位置即为最小元素
        }
        return res;
    }
};

以上是关于60291253去掉三个数字最小的数是?的主要内容,如果未能解决你的问题,请参考以下文章

19 把数组排成最小的数

筛法求素数

把数组排成最小的数

把数组排成最小的数

剑指offer-把数组排成最小的数

剑指offer-把数组排成最小的数