目录
1. 子集 II 🌟🌟
2. 快乐数 ※
3. 整数反转 ※
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
1. 子集 II
给你一个整数数组 nums
,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
示例 1:
输入:nums = [1,2,2] 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
出处:
https://edu.csdn.net/practice/25450836
代码:
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
public class subsetsWithDup {
public static class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> retList = new ArrayList<>();
retList.add(new ArrayList<>());
if (nums == null || nums.length == 0)
return retList;
Arrays.sort(nums);
List<Integer> tmp = new ArrayList<>();
tmp.add(nums[0]);
retList.add(tmp);
if (nums.length == 1)
return retList;
int lastLen = 1;
for (int i = 1; i < nums.length; i++) {
int size = retList.size();
if (nums[i] != nums[i - 1]) {
lastLen = size;
}
for (int j = size - lastLen; j < size; j++) {
List<Integer> inner = new ArrayList<>(retList.get(j));
inner.add(nums[i]);
retList.add(inner);
}
}
return retList;
}
}
public static void main(String[] args) {
Solution s = new Solution();
int[] nums = {1,2,2};
System.out.println(s.subsetsWithDup(nums));
int[] nums2 = {0};
System.out.println(s.subsetsWithDup(nums2));
}
}
输出:
[[], [1], [2], [1, 2], [2, 2], [1, 2, 2]]
[[], [0]]
2. 快乐数
编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果 可以变为 1,那么这个数就是快乐数。
如果 n
是快乐数就返回 true
;不是,则返回 false
。
示例 1:
输入:19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
示例 2:
输入:n = 2 输出:false
提示:
1 <= n <= 2^31 - 1
出处:
https://edu.csdn.net/practice/25450837
代码:
import java.util.List;
import java.util.ArrayList;
public class isHappy {
public static class Solution {
public boolean isHappy(int n) {
List<Integer> list = new ArrayList<Integer>();
list.add(n);
while (n != 1) {
int temp = 0;
while (n != 0) {
temp += (n % 10) * (n % 10);
n = n / 10;
}
n = temp;
if (list.contains(n)) {
break;
} else {
list.add(n);
}
}
return n == 1;
}
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.isHappy(19));
System.out.println(s.isHappy(2));
}
}
输出:
true
false
3. 整数反转
给你一个 32 位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0
提示:
-2^31 <= x <= 2^31 - 1
出处:
https://edu.csdn.net/practice/25450838
代码:
public class reverse {
public static class Solution {
public int reverse(int x) {
long xx = x;
long r;
long y = 0;
boolean sign = xx < 0;
while (xx != 0) {
r = xx % 10;
y = y * 10 + r;
if (sign) {
xx = (long) Math.ceil(xx / 10);
} else {
xx = (long) Math.floor(xx / 10);
}
}
return y > Integer.MAX_VALUE || y < Integer.MIN_VALUE ? 0 : (int) y;
}
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.reverse(123));
System.out.println(s.reverse(-123));
System.out.println(s.reverse(120));
System.out.println(s.reverse(0));
}
}
输出:
321
-321
21
0
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |