整数中1出现的次数(从1到n整数中1出现的次数)
题目描述
求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
C++代码
class Solution {
public:
int NumberOf1Between1AndN_Solution(int n)
{
if(n==0)
{
return 0;
}
int count = 0;
for(int i = 1;i<=n;i++)
{
count = count + NumOne(i);
}
return count;
}
int NumOne(int k)
{
int res = 0;
while(k)
{
if(k%10==1)
{
res++;
}
k = k/10;
}
return res;
}
};
把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
C++代码
class Solution {
public:
vector<vector<int>>res;
string PrintMinNumber(vector<int> numbers)
{
sort(numbers.begin(),numbers.end());
do
{
res.push_back(numbers);
}while(next_permutation(numbers.begin(),numbers.end()));
vector<string>result;
for(int i = 0;i<res.size();i++)
{
string s = "";
for(int j = 0;j<res[i].size();j++)
{
s = s + to_string(res[i][j]);
}
result.push_back(s);
}
sort(result.begin(),result.end());
return result[0];
}
};
丑数
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
C++代码
class Solution {
public:
int GetUglyNumber_Solution(int index)
{
if(index<=0)
{
return 0;
}
int index0 = 0;
int index1 = 0;
int index2 = 0;
int *ugly = (int*)malloc(sizeof(int)*index);
ugly[0] = 1;
int i = 1;
while(i<index)
{
int new2 = ugly[index0]*2;
int new3 = ugly[index1]*3;
int new4 = ugly[index2]*5;
int tempvalue = min(min(new2,new3),new4);
if(new2==tempvalue)
{
index0++;
}
if(new3==tempvalue)
{
index1++;
}
if(new4==tempvalue)
{
index2++;
}
ugly[i] = tempvalue;
i++;
}
return ugly[index-1];
}
};
第一个只出现一次的字符
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
C++代码
class Solution {
public:
int FirstNotRepeatingChar(string str)
{
unordered_map<char,int>mp;
for(int i = 0;i<str.size();i++)
{
mp[str[i]]++;
}
for(int j = 0;j<str.size();j++)
{
if(mp[str[j]]==1)
{
return j;
}
}
return -1;
}
};