Java每日一练(20230413)

简介: Java每日一练(20230413)

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







目录
相关文章
|
安全 Java C++
2023-3-25 java选择题每日一练
2023-3-25 java选择题每日一练
128 1
CSDN每日一练(Java)--小艺的英文名
CSDN每日一练(Java)--小艺的英文名
|
C++ Python Rust
Rust 重载运算符|复数结构的“加减乘除”四则运算
Rust 重载运算符|复数结构的“加减乘除”四则运算
264 0
Rust 重载运算符|复数结构的“加减乘除”四则运算
|
Linux
Linux 终端命令之文件浏览(1) cat
Linux 终端命令之文件浏览(1) cat
157 0
Linux 终端命令之文件浏览(1) cat
|
Go Python Rust
Rust 编程小技巧摘选(7)
Rust 编程小技巧摘选(7)
348 0
Rust 编程小技巧摘选(7)
|
Rust 索引
Rust 编程小技巧摘选(6)
Rust 编程小技巧摘选(6)
216 1
Rust 编程小技巧摘选(6)
|
Linux Windows Ubuntu
Windows 使用 Linux 子系统,轻轻松松安装多个linux
Windows 使用 Linux 子系统,轻轻松松安装多个linux
1652 0
Windows 使用 Linux 子系统,轻轻松松安装多个linux
|
C++ Rust NoSQL
Rust 数据类型 之 类C枚举 c-like enum
Rust 数据类型 之 类C枚举 c-like enum
194 0
Rust 数据类型 之 类C枚举 c-like enum
|
Java Go C++
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
205 0
Golang每日一练(leetDay0120) 反转字符串中的元音字母、前K个高频元素
|
Java Go C++
Golang每日一练(leetDay0116) 路径交叉、回文对
Golang每日一练(leetDay0116) 路径交叉、回文对
161 0
Golang每日一练(leetDay0116) 路径交叉、回文对