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来写的

  • 相关阅读:
    bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
    vue-cli脚手架和webpack-simple模板项目
    Vue-router 进阶
    前端路由vue-router介绍
    vue的一些特殊特性
    生命周期钩子
    过滤器
    RSA加密算法
    欧几里得算法
    动态规划
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/7233165.html
Copyright © 2011-2022 走看看