LeetCode—Largest Number
来源:互联网 发布:enum数据类型php 编辑:程序博客网 时间:2024/04/19 14:21
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.
注意返回的是一个字符串
在这个例子中感觉最难想到的是两个数字之间的比较,这里并不是数值上的比较,而是从最高位开始进行的比较
用一个简单的比较函数就可以得到结果
bool cmp(string str1,string str2)
{
return (str1+str2) >= (str2+str1);
}
下面是是我的解答方法:(注意如果出现多个0的情况那么直接作为一个0)
<span style="color:#333333;">#include <sstream> #include <string>#include <vector>using namespace std;bool cmp(string str1,string str2){return (str1+str2) >= (str2+str1);}string GetSort(vector<string> vecString){int length = vecString.size();string maxStr = "";bool flag = false;while (!vecString.empty()){string maxVal = "0";vector<string>::iterator maxRecode;vector<string> :: iterator it = vecString.begin();for (;it < vecString.end(); it++){if (cmp(*it,maxVal)){maxVal = *it;maxRecode = it;}}vecString.erase(maxRecode);if (maxVal != "0"){maxStr += maxVal;flag = true;}else if(flag){maxStr += maxVal;} }if (!flag){maxStr += "0";}return maxStr;}string largestNumber(vector<int> &num) {vector<string> vecString;string maxValNum = "";int length = num.size();if(length == 0){return NULL;}if(length == 1){stringstream ss;</span><span style="color:#ff0000;">ss << num[0];return ss.str(); //<将int转化为string</span><span style="color:#333333;">}for (int i = 0; i < num.size(); i++){stringstream ss;ss << num[i];vecString.push_back(ss.str());}//stack<int> stackStr = GetSort(vecString);maxValNum = GetSort(vecString);return maxValNum;}void main(){vector<int> it;it.push_back(13);it.push_back(9);it.push_back(0);string x = largestNumber(it);}</span>其中也有方法直接利用STL对应的sort函数,进行相应的排序
<span style="color:#333333;">#include <sstream> #include <string>#include <vector>#include <algorithm>using namespace std;bool cmp(const string s1, const string s2) {return (s1 + s2) > (s2 + s1);}string largestNumber(vector<int> &num) {vector<string> s_num(num.size());stringstream stream;for (int i = 0; i < num.size(); ++i) {stream << num[i];stream >> s_num[i];stream.clear();}</span><span style="color:#ff0000;"><strong>sort(s_num.begin(), s_num.end(), cmp);</strong></span><span style="color:#333333;">string tmp_res;for (int i = 0; i < s_num.size(); ++i) {tmp_res += s_num[i];}string res;bool flag = false;for (int i = 0; i < tmp_res.size(); ++i) {if (tmp_res[i] != '0') {res.push_back(tmp_res[i]);flag = true;} else if (flag) {res.push_back(tmp_res[i]);}}if (!flag) res.push_back('0');return res;}void main(){vector<int> it;it.push_back(13);it.push_back(9);it.push_back(0);string x = largestNumber(it);}</span>
0 0
- LeetCode—Largest Number
- leetcode——Largest Number
- LeetCode 之 Largest Number — C++ 实现
- Largest Number @leetCode
- LeetCode : Largest Number
- Leetcode Largest Number
- [LeetCode] Largest Number
- [leetcode]179 Largest Number
- [LeetCode] Largest Number
- Leetcode Largest Number
- [LeetCode]Largest Number
- leetcode 179: Largest Number
- 【LeetCode】Largest Number
- 【Leetcode】Largest Number
- [LeetCode]179.Largest Number
- LeetCode: Largest Number
- Largest Number|leetcode解决方案
- leetcode 之Largest Number
- 【Darwin学习笔记】之TaskThread
- 关于MQTT-SN的开发
- SQL SERVER 2005如何建立自动备份的维护计划
- 高通平台MSM8916LCM模块移植(一)-bootloader部分
- 找数字
- LeetCode—Largest Number
- 服务器向Android推送的相关知识和解决方案
- Atheros网卡在linux下面的配置与编译详情
- jQuery最佳实践
- The goal you specified requires a project to execute but there is no POM in 错误
- ubuntu14.04安装cuda
- java Singleton单例模式
- Ubuntu系统用sysv-rc-conf启动各运行级别下的守护进程
- 发现国内也有好的代码托管 所以决定把博客放到这里 谢谢