LC剑指 Offer 45. 把数组排成最小的数
class Solution {
public String minNumber(int[] nums) {
String[] strs = new String[nums.length];
for(int i = 0; i < nums.length; i++)
strs[i] = String.valueOf(nums[i]);
Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));
StringBuilder res = new StringBuilder();
for(String s : strs)
res.append(s);
return res.toString();
}
}
LC191. 位1的个数
//对n的每一位进行与运算,循环迭代32次,那么如果是1计数器加1,然后将n右移一位比较下一位。
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
//使用一个计数器计算1的个数
int count = 0;
for (int i = 0; i < 32; i++) {
//如果当前与运算不为0那么也就是这一个位上是1
if ((n & 1) != 0) {
count++;
}
//将n右移一位
n >>= 1;
}
return count;
}
}
LC242. 有效的字母异位词
//想到最简单的方法就是排序后是否相同
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] str1 = s.toCharArray();
char[] str2 = t.toCharArray();
Arrays.sort(str1);
Arrays.sort(str2);
return Arrays.equals(str1, str2);
}
}
//第二种方法就是定义一个26位的整型数组,然后两个字符串同时遍历,一个做加法,一个坐减法,如果最后数组中全为0,那么就是字母异位词,并且都只包含小写字母
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())
return false;
int[] alpha = new int[26];
for(int i = 0; i< s.length(); i++) {
alpha[s.charAt(i) - 'a'] ++;
alpha[t.charAt(i) - 'a'] --;
}
for(int i=0;i<26;i++)
if(alpha[i] != 0)
return false;
return true;
}
}