zoukankan      html  css  js  c++  java
  • leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数

    这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的

    179. Largest Number

    a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_string函数将整数转换成字符串,比printf的方式简洁

    b.cmp函数必须用static才能使用

    c.这题需要排成最大的数,cmp函数如何确定< 、>符合呢?cmp中可以默认为a就是两个字符中的第一个,b是第二个,所以a+b>b+a返回true就继续保持这样的排列。如果是<,a+b就会返回fasle,相对于原来的情况就要重新排列 

    d.会出现这种情况:

    Input:
    [0,0]
    Output:
    "00"
    Expected

    即拼接成了多个0,这个时候通过判断第一个字符是不是0来确定返回值

    class Solution {
    public:
        string largestNumber(vector<int>& nums) {
            vector<string> input;
            for(int i = 0;i < nums.size();i++)
                input.push_back(to_string(nums[i]));
            sort(input.begin(),input.end(),cmp);
            string res = "";
            for(int i = 0;i < input.size();i++)
                res += input[i];
            return res[0] == '0' ? "0" : res;
        }
        static bool cmp(string a,string b){
            return a + b > b + a;
        }
    };

    剑指offer33 把数组排成最小的数

    正确代码

    class Solution {
    public:
        string PrintMinNumber(vector<int> numbers) {
            vector<string> str;
            for(int i = 0;i < numbers.size();i++){
                char ch[999];
                sprintf(ch,"%d",numbers[i]);
                str.push_back(ch);
            }
            sort(str.begin(),str.end(),cmp);
            string s;
            for(int i = 0;i < str.size();i++)
                s += str[i];
            return s;
        }
        static bool cmp(string a,string b){
            return a+b < b+a;
        }
    };

    如果写成这样,是错误的。因为tmp是个char,因为str这个vector是string的。

    char tmp = numbers[i] + '0';
    str.push_back(tmp);

    如果写成这样,也是错误的。因为+'0'这种转换只能转换成char字符,不能转换成字符串。

    string tmp = numbers[i] + '0';
    str.push_back(tmp);

    利用to_string函数可写

    string tmp = to_string(numbers[i]);
    str.push_back(tmp);

    其他人也有用stringstream来写的

  • 相关阅读:
    将才和帅才之的区别
    百胜集团XX:BPM实现业务流程全过程无缝链接(案例)
    心、肝、脾、肺、肾五脏解说+ 五脏六腑的作用
    人体的五行属性
    易经卦的通例
    《孙子兵法》中的企业领导艺术和方法
    五行盘谱
    大容量高并发性服务器组的技术解析
    中华哲学的领导艺术
    如何在WINDOW环境下搭建ActivateMQ和zookeeper集群环境
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/7233165.html
Copyright © 2011-2022 走看看