编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。
示例:
输入: 6
输出: true
解释: 6 = 2 × 3
- 循环实现:循环去除 2、3、5,直到不能整除,如果余数是 1,那么就是丑数。
- 递归实现:和循环一样,也是不停地除2、3、5。
class Solution {
public boolean isUgly(int num) {
if (num <= 0) {
return false;
} else if (num == 1) {
return true;
}
while (num % 2 == 0) {
num /= 2;
}
while (num % 3 == 0) {
num /= 3;
}
while (num % 5 == 0) {
num /= 5;
}
return num == 1;
}
private static boolean isUgly2(int num) {
if (num <= 0) {
return false;
} else if (num == 1) {
return true;
}
if (num % 2 == 0) {
return isUgly2(num / 2);
}
if (num % 3 == 0) {
return isUgly2(num / 3);
}
if (num % 5 == 0) {
return isUgly2(num / 5);
}
return false;
}
}
循环和递归实现一样:
- 时间复杂度:O(logn)
- 空间复杂度:O(1)
给定两个数组,编写一个函数来计算它们的交集。
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
使用一个 Set 去除数组一重复元素,另一个 Set 保存两个数组的交集
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1 == null || nums2 == null) {
return new int[]{};
}
Set<Integer> set1 = new HashSet<>(nums1.length);
for (int i : nums1) {
set1.add(i);
}
Set<Integer> set2 = new HashSet<>(nums1.length);
for (int i : nums2) {
if (set1.contains(i)) {
set2.add(i);
}
}
int size = set2.size();
int[] ret = new int[size];
Iterator<Integer> iterator = set2.iterator();
for (int i = 0; i < size; i++) {
ret[i] = iterator.next();
}
return ret;
}
}
- 时间复杂度:O(n)
- 空间复杂度:O(n)
What is an API? In English, please. 什么是 API?
开发者都知道 API 是应用程序接口,作者对它有更广泛的认识。API 是服务方的一部分,它接收请求并发出响应。API 是向客户提供服务的一种方式,客户端访问 API 获取消息,比如 GitHub 的 API。在面向对象编程中,对象的 public 方法也可以看作是一种 API,用来与其他对象进行交互。
Android I/O 那些事儿 总结了 Android 系统的 I/O 知识,对它有了更深层次的了解。
经典是经过时间筛选的,在这个浮躁的社会,多读经典是最省时间的选择。