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 = ;i < nums.size();i++)
input.push_back(to_string(nums[i]));
sort(input.begin(),input.end(),cmp);
string res = "";
for(int i = ;i < input.size();i++)
res += input[i];
return res[] == '' ? "" : 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 = ;i < numbers.size();i++){
char ch[];
sprintf(ch,"%d",numbers[i]);
str.push_back(ch);
}
sort(str.begin(),str.end(),cmp);
string s;
for(int i = ;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] + '';
str.push_back(tmp);
如果写成这样,也是错误的。因为+'0'这种转换只能转换成char字符,不能转换成字符串。
string tmp = numbers[i] + '';
str.push_back(tmp);
利用to_string函数可写
string tmp = to_string(numbers[i]);
str.push_back(tmp);
其他人也有用stringstream来写的
leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数的更多相关文章
- 剑指offer 把数组排成最小的数 atoi和itoa,pow
pow(x,y)在#include<math.h>文件中,计算x的y次方. C++引入头文件:#include <stdlib.h> 或者 #include <cstdl ...
- 剑指Offer31 把数组排成最小的数
/************************************************************************* > File Name: 31_SortAr ...
- [剑指Offer]45-把数组排成最小的数
题目链接 https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&t ...
- 剑指Offer——把数组排成最小的数
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 排 ...
- 剑指offer--32.把数组排成最小的数
用to_string()将整形转化为字符串,对字符串进行比较 --------------------------------------------------------------------- ...
- 剑指Offer-39.把数组排成最小的数(C++/Java)
题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 将数组 ...
- 用js刷剑指offer(把数组排成最小的数)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 对ve ...
- 4-剑指offer: 把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 代码: cl ...
- 剑指Offer - 九度1504 - 把数组排成最小的数
剑指Offer - 九度1504 - 把数组排成最小的数2014-02-06 00:19 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...
随机推荐
- gridview把textbox的值修改还是旧值的解决方法
解决方法很简单,加上if(!IsPostBack) 就OK了,因为之前加载之前都会调用InitData(). protected void Page_Load(object sender, Event ...
- 使用CTE生成辅助表(数字或时间)等
数字辅助表: , ;WITH Digital_Rangs(Digital) AS ( SELECT @start_digital UNION ALL FROM [Digital_Rangs] WHER ...
- 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇
文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...
- ICPC 2016 China Final J. Mr.Panda and TubeMaster【最大费用最大流】
有一种限制下界强制选的,但是也可以不用 把每个格点拆成两个,一个连s一个连t,对于不是必选的连中间连流量1费用0边表示不选,然后黑白染色,黑点连横着白点连竖着,边权就是这条水管的权值,然后跑最大费用最 ...
- (三)siege的使用
学习: ELK——http://dockone.io/article/3655 docker——http://www.testclass.net/docker/ Android Monkey压力测试— ...
- js函数-构成
前言 函数是一种封装,在任何语言中都是一个核心概念.在js中,函数是做为对象的子类型存在的.可以拥有自己的属性和方法,可以做为值进行传递,这两个特性让js拥有使用函数式编程的能力. 函数的声明 字面量 ...
- 长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order
链接:https://ac.nowcoder.com/acm/contest/912/I 题意: Fate Grand Order是型月社发行的角色扮演类手机游戏,是著名的氪金抽卡"垃圾&q ...
- HDU-3639-Hawk-and-Chicken(强连通,缩点,DFS)
链接:https://vjudge.net/problem/HDU-3639 题意: 有n个小朋友在一个班级中,现在要选择班长.收集了小朋友们的意见,一条意见表示为A认为B合适.这个是具备传递性的,A ...
- Linux修改war包中文件
rm -rf /tmp/wiq.warcp /u02/wms_dev/wiq-app/wars/wiq.war /tmpcd /tmp jar xvf wiq.war vim WEB-INF/clas ...
- NET Core中使用Apworks
NET Core中使用Apworks HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单.统一的形式,在API中引入超链接特性,使得AP ...