Friday, July 24, 2015

Leetcode 179: largest number


Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
这道题一开始分析,思路是组成largest 数字是有规律的,如果能放在一个可以自定义排序的容器里面,放进去可以自动排好序,直接输出就是想要的结果, 一开始打算用priority_queue,但是后来又发现,其实可以直接定义一个sort函数,把原来的数组sort一下就可以了,就开始写自定义的sort函数,但是sort函数写的非常长,而且啰嗦,一个字符一个字符地比较,虽然也能写出来,但是自定义的sort函数这么长总觉得不规范,后来在网上看别人写的sort函数,发现其实只要比较两个字符串,s1+s2 , s2+s1谁长就把谁大放在前面,这样一想简单多了。 

注意对某些语句简写的方法,以后的程序中可以应用。

class comp {
public:
  bool operator()(string left, string right) {
      return left + right > right+left;
  }
};
class Solution {
public:
    string largestNumber(vector<int>& nums) {
        string rst = "";
        //sanity check
        if (nums.size() == 0) return rst;
        vector<string> snums;
        for (int i = 0; i < nums.size(); i++) {//for (int i : nums) : 对每个nums里面的数i
            int tmp = nums[i];
            //get the first digit
            string stmp = to_string(tmp);
            snums.push_back(stmp);
        }
        comp mycomp;
       sort(snums.begin(), snums.end(), mycomp);
       for (int i = 0; i < snums.size();i++) { //for (string i : snums) : 对每个snums里面的string i
           rst += snums[i];
       }
       if (rst[0] == '0' && rst.size() > 0) return "0";
        return rst;
    }
};

No comments:

Post a Comment