Largest Number

这个题就是定义一个新的比较整型数大小的方法,没有想到string的比较,第一次写的代码不完整,有错误,测试用例为[121,12]时可测出错误。在这儿贴出代码仅仅是记录一下自己当时的思路:

class Solution {
public:
    static void pushinvector(vector<int>&vec,int num_t)
	{
	    if(num_t==0)  //容易漏掉这个特殊情况
	    {
	        vec.push_back(0);
	        return ;
	    }
		while(num_t!=0)
		{
			vec.push_back(num_t%10);
			num_t/=10;
		}
	}
	static bool compare(const int& num1,const int& num2)
	{
		vector<int> vec1,vec2;
		pushinvector(vec1,num1);
		pushinvector(vec2,num2);

		size_t i=vec1.size()-1;
		size_t j=vec2.size()-1;
		size_t i_size=i;
		size_t j_size=j;
		while(i>0&&j>0)
		{
			if(vec1[i]==vec2[j])
			{
				i--;j--;
			}
			else
			{
				return (vec1[i]>vec2[j]);
			}
		}
		if(i==0&&j==0)
		{
			return (vec1[i]>vec2[j]);
		}
		else if(i==0&&j>0) //在这种情况下的比较不完整,但是会发现写的代码非常啰嗦,不简洁
		{
			if(vec1[i]==vec2[j])
			{
				return (vec2[j-1]<vec2[j_size]);
			}
			else
			{
				return (vec1[i]>vec2[j]);
			}
		}
		else
		{
			if(vec1[i]==vec2[j])
			{
				return (vec1[i-1]>vec1[i_size]);
			}
			else
			{
				return (vec1[i]>vec2[j]);
			}
		}
	}
	string largestNumber(vector<int> &num) {
		string str;
		sort(num.begin(),num.end(),compare);
		if (num[0]==0)
		{
			return "0";
		}
		int vec_size=num.size();
		for(int i=0;i<vec_size;i++)
		{

			str+=to_string((unsigned long long)num[i]);
		}
		return str;
	}
};

 比较函数采用string进行比较的话,将会异常简单,代码如下:

class Solution {
public:

	static bool compare(const string& str1,const string& str2)
	{
	    return (str1+str2)>(str2+str1);
	}
	string largestNumber(vector<int> &num) {
	    vector<string> str_vector;
	    string str;
	    int size=num.size();
	    for(int i=0;i<size;i++)
	    {
	        str_vector.push_back(to_string((unsigned long long)num[i]));
	    }
		
		sort(str_vector.begin(),str_vector.end(),compare);
		
		if(str_vector[0]=="0")
		return "0";
		for(int i=0;i<size;i++)
		{
			str+=str_vector[i];
		}
		return str;
	}
};

 

posted @ 2015-03-24 10:18  zhanghui_dut  阅读(82)  评论(0)    收藏  举报