题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
int len = numbers.size();
string result = "";
if(len > 1){
sort(numbers.begin(),numbers.end(),cmp);
}
for(int i = 0; i < len; i++){
result += to_string(numbers[i]);
}
return result;
}
static bool cmp(int num1,int num2){
string str1 = to_string(num1) + to_string(num2);
string str2 = to_string(num2) + to_string(num1);
return str1 < str2;
}
};
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index < 1) return 0;
int result = 1;
vector<int> tempArray;
tempArray.push_back(result);
int index2 = 0;
int index3 = 0;
int index5 = 0;
int result2 = 0;
int result3 = 0;
int result5 = 0;
for (int i = 1; i < index; i++){
result2 = tempArray[index2] * 2;
result3 = tempArray[index3] * 3;
result5 = tempArray[index5] * 5;
result = min(result2, min(result3, result5));
tempArray.push_back(result);
if (result == result2) index2++;
if (result == result3) index3++;
if (result == result5) index5++;
}
return result;
}
int min(int num1, int num2){
return num1 < num2 ? num1 : num2;
}
};
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
class Solution {
public:
int FirstNotRepeatingChar(string str) {
int len = str.size();
if(len < 1) return -1;
if(len == 1) return 0;
int result = -1;
map<char,int> tempMap;
for(int i = 0; i < len; i++){
tempMap[str[i]]++;
}
for(int i = 0; i < len; i++){
if(tempMap[str[i]] == 1){
result = i;
break;
}
}
return result;
}
};