整数中1的个数
求出1—13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
int count = 0;
if(n < 1)
return 0;
for(int i = 1; i <= n ;i++){
int temp = i;
while(temp > 0){
if(temp % 10 == 1)
count++;
temp /= 10;
}
}
return count;
}
}
class Solution {
public:
int NumberOf1Between1AndN_Solution(int n)
{
int count=0;
if(n<1) return 0;
for(int i=1;i<=n;++i)
{
int temp=i;
while(temp)
{
if(temp%10==1)
++count;
temp/=10;
}
}
return count;
}
};
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
import java.util.ArrayList;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers == null && numbers.length == 0)
return "";
for(int i = 0; i < numbers.length; i++){
for(int j = i + 1; j < numbers.length; j++){
int sum1 = Integer.valueOf(numbers[i] + "" + numbers[j]);
int sum2 = Integer.valueOf(numbers[j] + "" + numbers[i]);
if(sum1 > sum2){
int temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] =temp;
}
}
}
String str = new String("");
for(int i=0; i < numbers.length; i++)
str = str + numbers[i];
return str;
}
}
/*对vector容器内的数据进行排序,按照 将a和b转为string后
若 a+b<b+a a排在在前 的规则排序,
如 2 21 因为 212 < 221 所以 排序后为 21 2
to_string() 可以将int 转化为string
*/ class Solution {
public:
static bool cmp(int a,int b){
string A="";
string B="";
A+=to_string(a);
A+=to_string(b);
B+=to_string(b);
B+=to_string(a);
return A<B;
}
string PrintMinNumber(vector<int> numbers) {
string answer="";
sort(numbers.begin(),numbers.end(),cmp);
for(int i=0;i<numbers.size();i++){
answer+=to_string(numbers[i]);
}
return answer;
}
};
丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
import java.util.*;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index == 0){
return 0;
}
int p2 = 0;
int p3 = 0;
int p5 = 0;//不能连着写!!!
int[] arr = new int[index];
arr[0] = 1;
for(int i = 1; i < index; i++){
arr[i] = Math.min(arr[p2] * 2,Math.min(arr[p3] * 3,arr[p5] * 5));
if(arr[i] == arr[p2]*2)
p2++;
if(arr[i] == arr[p3]*3)
p3++;
if(arr[i] == arr[p5]*5)
p5++;
}
return arr[index-1];
}
}
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<=0) return 0;
int res[index];
int p2=0,p3=0,p5=0;
res[0]=1;
for(int i=1;i<index;i++)
{
res[i]=min(res[p2]*2,min(res[p3]*3,res[p5]*5));
if(res[i]==res[p2]*2) p2++;
if(res[i]==res[p3]*3) p3++;
if(res[i]==res[p5]*5) p5++;
}
return res[index-1];
}
};