题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
int n;
String s = "";
ArrayList<Integer> list = new ArrayList<Integer>();
//将字符串输入到 list集合中去
for (int i : numbers) {
list.add(i);
}
//运用自己排序算法进行排序
/* 对vector容器内的数据进行排序,
按照 将a和b转为string后
若 a+b<b+a a排在在前 的规则排序,
如 2 21 因为 212 < 221 所以 排序后为 21 2
to_string() 可以将int 转化为string*/
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
String s1 = o1 + "" + o2;
String s2 = o2 + "" + o1;
return s1.compareTo(s2);
}
});
StringBuilder sb=new StringBuilder();
for (Integer integer : list) {
sb.append(integer);
}
return sb.toString();
}
}
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数
import java.util.*;
public class Solution {
public int GetUglyNumber_Solution(int n) {
if(n==0){
return 0;
}
ArrayList<Integer> list = new ArrayList<Integer>();
int i2 = 0,i3 = 0, i5 =0;
list.add(1);
while(list.size()<n){
int m2 = list.get(i2)*2;
int m3 = list.get(i3)*3;
int m5 = list.get(i5)*5;
int min = Math.min(m2,Math.min(m3,m5));
list.add(min);
if(min==m2) i2++;
if(min ==m3)i3++;
if(min == m5)i5++;
}
return list.get(list.size()-1);
}
}
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
public class Solution {
public int FirstNotRepeatingChar(String str) {
//A =65 ;
//每个数组的数字代表每一个字符出现的次数;
int words[] = new int[58];
for(int i = 0;i<str.length();i++){
words[(int)str.charAt(i)-65] +=1;
}
for(int i =0;i<str.length();i++){
if(words[(int)str.charAt(i)-65]==1){
return i;
}
}
return -1;
}
}