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


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/


目录
相关文章
|
Java
java基础(10)数据类型中的整数类型
Java中的整数类型包括byte、short、int和long。整数字面值默认为int类型,加L表示long类型。整数字面值可以是十进制、八进制(0开头)或十六进制(0x开头)。小容量类型(如int)可自动转换为大容量类型(如long),但大容量转小容量需强制转换,可能导致精度损失。
271 2
|
算法 Java
Java求一个集合的所有子集
Java求一个集合的所有子集
193 0
|
Java 程序员
程序员必知:【java】判断字符串是否整数的三种方式,孰优孰劣请自行判断
程序员必知:【java】判断字符串是否整数的三种方式,孰优孰劣请自行判断
462 3
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)
182 0
|
安全 Java C++
2023-3-25 java选择题每日一练
2023-3-25 java选择题每日一练
137 1
|
Java
JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)
JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)
159 0
CSDN每日一练(Java)--小艺的英文名
CSDN每日一练(Java)--小艺的英文名
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
算法 Java 开发者
Java:求正整数分解为质因数Java
Java:求正整数分解为质因数Java
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
176 0