1.字符串压缩
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
public class Main {
static Map<Character, Integer> countString(String string) {
if (string == null || string.length() == 0)
return null;
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < string.length(); i++)
map.put(string.charAt(i), 0);
for (int i = 0; i < string.length(); i++) {
if (map.containsKey(string.charAt(i)))
map.put(string.charAt(i), map.get(string.charAt(i)) + 1);
}
return map;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
StringBuffer sBuffer = new StringBuffer();
Map<Character, Integer> map = countString(s);
for (Character a : map.keySet())
sBuffer.append(a).append(map.get(a));
System.out.println(sBuffer);
}
}
2. 判断一个整数(小于1000)有多少种方式是2的整数次幂的和
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int [] a = new int[10];
a[0] = 1;
for (int i = 1; i < 10; i++) {
a[i] = a[i-1]*2;
}
int [] dp = new int[1005];
// for (int i = 0; i < 10; i++) {
// dp[a[i]] = 1;
// }
dp[0] = 1;
for (int i = 0; i < 1005; i++) {
for (int j = 0; j < 10; j++) {
if (i >= a[j]){
dp[i] += dp[i-a[j]];
}
}
}
for (int i = 0; i < m; i++) {
int n = scanner.nextInt();
System.out.println(dp[n]);
}
}
}