java实现枚举

介绍

枚举算法也叫暴力算法,是一种简单直接的问题求解方法,它通过逐一列举问题的所有可能解,并检查每个可能解是否符合问题的条件,直到找到正确的解或者遍历完所有可能的情况。
对于一个问题,首先确定解的范围,然后在这个范围内逐个尝试所有可能的值,例如,在寻找一个整数 n 的所有因数时,枚举算法会从1开始,逐个检查到 n ,判断每个数是否能整除 n 。

枚举几乎可以用于解决任何类型的问题,只要能够确定解的范围,但缺点也很明显,当问题规模增大时,需要检查的可能解数量会迅速增加,这会导致程序运行效率低下,为了克服枚举算法的这个缺点,需要对其进行优化,通过数学推导发现问题的规律,减少不必要的计算。

题目1

对于给定的整数 n,需进行如下判断:若存在三个不同的正整数,当它们分别与特定整数相乘时结果均为 n,则返回 true;若无法找到这样恰好三个正整数满足该情形,便返回 false。
 
举例而言,设存在整数 k,若 n = k * m,这里的 m 即为 n 的一个除数。当 n = 2 时,仅能以 1×2 表示,即其除数只有 1 和 2,所以此情形下应返回 false,而当 n = 4 时,可写成 1×4 与 2×2,其除数有 1、2 和 4,这种情况下则返回 true。

解题思路

从1到 n 遍历每个数字 i,满足条件能整除三次就返回true。

代码实现

public class Main {public boolean isThree(int n) {int count = 0;for (int i = 1; i <= n; i++) {if (n % i == 0) {count++;}}return count == 3;}public static void main(String[] args) {boolean result = new Main().isThree(4);System.out.println(result);}
}

检查 n 是否能被 i 整除,如果可以,那么 i 就是 n 的一个除数,将count 加1,全部执行完成后,检查 count 是否等于3,如果是,则返回 true ,否则返回 false 。

优化思路

当一个数有三个除数时,它一定不是质数, 对于每个 p ,检查 n 是否可以整除p,如果是,那么 n 就有三个除数(1、 p 、 n )。

public class Main {public boolean isThree(int n) {if(n<=3){return false;}for(int p=2;p*p<=n;p++){if(n%p==0){return true;}}return false;}public static void main(String[] args) {boolean result = new Main().isThree(11);System.out.println(result);}
}

从2开始遍历到 n,如果它有平方根p,那么返回 true,如果遍历完都没有找到这样的 p ,则返回 false 。

(取自leedcode1952)

题目2

给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。 

示例 1:输入: n = 5 输出: 2 解释: 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。

示例 2:输入: n = 9 输出: 3 解释: 9 = 4 + 5 = 2 + 3 + 4

示例 3:输入: n = 15 输出: 4 解释: 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5

解题思路

可以采取等差数列的公式,如果存在它的等差数列就将总数加1。

代码实现

public class Main {public static void main(String[] args) {int result = Sum(15);System.out.println(result);}public static int Sum(int n) {int count = 0;n *=2;for (int i = 1; i * i <= n; i++) {if (n % i != 0) {continue;}int a = n / i - i + 1;boolean res = a % 2 == 0;if (res) {count++;}}return count;}
}

对于连续正整数序列a,a + 1,a+2 , a + 3 , a+k其和S=(2a + k)(k + 1)/2,我们要推导出2a。
将等式两边同时乘以2,得到2S=(2a + k)(k + 1)。
所以2a= 2S - k(k + 1) / k + 1,将项数减去 1就是 2a = 2S - k(k - 1) / k ,也就是2a = 2S/ k - k + 1,演变成我们公式里的 n*=2;int a = n / i - i + 1; 和 a % 2 == 0; 即可得出答案

(取自leedcode829)

 ​​​​​题目3

给定一个非负的整数变量 num,需确定是否存在这样一个非负整数 k,使得 k 与其各位数字反转后所形成的整数相加的结果恰好等于 num,若存在这样的 k,则返回 true;若不存在,则返回 false。

解题思路

枚举从零到num的所有k数,判断它们反转相加的结果是否等于 num。

示例:

输入:num = 443 输出:true 解释:172 + 271 = 443 ,所以返回 true。

输入:num = 63 输出:false 解释:63 不能表示为非负整数及其反转后数字之和,返回 false 。

代码实现

public class Main {public static void main(String[] args) {int num = 443;boolean flag = true;for (int i = 0; i < num; i++) {int rev = reverseNumber(i);if (rev+i==num) {flag = false;}}if (flag) {System.out.println(false);}else {System.out.println(true);}}public static int reverseNumber(int n) {int rev = 0;while (n != 0) {rev = rev * 10 + n % 10;n /= 10;}return rev;}
}

在以上代码中使用了 for 循环从0开始,每次递增1,直到 i 小于num,在每次循环中
都调用了reverseNumber  方法对当前的整数  i  进行反转,然后判断rev + i是否等于num,如果相等,说明找到了满足条件的整数  i ,此时将flag的值设置为false。

(取自leedcode2443)

以上就是枚举的应用示例,在实际应用中,对于复杂或大规模问题,通常需要结合问题特性对枚举进行优化,如利用数学规律减少不必要的枚举次数,或者借助更高效的数据结构来存储和处理数据,以提升效率。总之,枚举是算法学习的重要基石,理解其优劣有助于在不同场景下合理运用或优化算法,为解决更复杂的编程和数学问题奠定基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 最长回文子串

目录 解法1&#xff1a;递归算法 解法2&#xff1a;Map取同字母位置法 解法3&#xff1a;中心扩展法 解法4&#xff1a;动态规划法 解法5: Manacher算法 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;&quo…

B树的简单实现

template<class K, size_t M> struct BTreeNode {K _keys[M]; // 用于存储关键字的数组&#xff0c;最多容纳 M 个关键字&#xff08;超额一个&#xff0c;为分裂提供空间&#xff09;。BTreeNode<K, M>* _subs[M 1]; // 存储子节点的指针数组&#xff0c;最多 M1…

2020 年 9 月青少年软编等考 C 语言三级真题解析

目录 T1. 因子问题思路分析T2. 质数的和与积思路分析T3. 括号匹配问题思路分析T4. 吃糖果 2思路分析T5. 铺砖思路分析T1. 因子问题 任给两个正整数 n n n、 m m m,求一个最小的正整数 a a a,使得 a a a 和 ( m − a ) (m-a) (m−a) 都是 n n n 的因子。 时间限制:1 s…

SpringBoot(8)-任务

目录 一、异步任务 二、定时任务 三、邮件任务 一、异步任务 使用场景&#xff1a;后端发送邮件需要时间&#xff0c;前端若响应不动会导致体验感不佳&#xff0c;一般会采用多线程的方式去处理这些任务&#xff0c;但每次都需要自己去手动编写多线程来实现 1、编写servic…

React的诞生与发展

React诞生于2013年&#xff0c;由Facebook&#xff08;现Meta&#xff09;的工程师Jordan Walke开发。那时的前端开发还处在jQuery的天下&#xff0c;组件化的概念尚未形成。React的出现犹如一阵春风&#xff0c;为前端开发带来了全新的开发理念和方法论。 React最核心的设计理…

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理

WebStorm 2022.3.2/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理 1. 标题识别elementUI组件爆红 这个原因是&#xff1a; 在官网说明里&#xff0c;才版本2024.1开始&#xff0c;默认启用的 Vue Language Server&#xff0c;但是在 Vue 2 项…

Odoo :免费且开源的农牧行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案&#xff0c;提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放&#xff0c;效率低、管控弱 产品研发过程缺少体系化…

解决Excel文件流读取数字为时间乱码问题

在将Excel文件流转换为Java中的List时&#xff0c;如果遇到文本被错误地识别为日期格式的问题&#xff0c;这通常是由于Apache POI库在处理单元格数据时默认的行为所导致的。Apache POI会尝试根据单元格的内容自动确定其类型&#xff0c;包括字符串、数字&#xff08;可能解释为…

【Unity踩坑】出现d3d11问题导致编辑器崩溃

升级到Unity 6&#xff0c;有时出现下面这种D3D11的问题&#xff0c;会导致编辑器崩溃。 有人总结了这个问题的解决方法&#xff0c;可以做为参考&#xff1a; Failed to present D3D11 swapchain due to device reset/removed. List of Solutions - Unity Engine - Unity Dis…

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘内存 为…

JMeter监听器与压测监控之Grafana

Grafana 是一个开源的度量分析和可视化套件&#xff0c;通常用于监控和观察系统和应用的性能。本文将指导你如何在 Kali Linux 上使用 Docker 来部署 Grafana 性能监控平台。 前提条件 Kali Linux&#xff1a;确保你已经安装了 Kali Linux。Docker&#xff1a;确保你的系统已…

集群聊天服务器(13)redis环境安装和发布订阅命令

目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的&#xff0c;还可以存链表、数组等等复杂数据结构 而且数据是在…

linux常用指令总结(附Vim编辑器学习总结)

本文是博主对Linux中经常用到的一些指令进行的总结&#xff0c;文章也附带了Linux中经常用到的Vim编辑器的一些基本知识和使用指令&#xff0c;觉得有帮助的朋友可以点赞收藏&#xff01; 本文会持续进行更新 linux常用指令总结 $ pwd # 查看当前终端所在…

w046基于web的古典舞在线交流平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

阿里云轻量应用服务器可以用在哪些场景呢

在数字化转型的浪潮中&#xff0c;中小企业面临着如何快速、高效地上云的挑战。阿里云轻量应用服务器&#xff08;SWAS&#xff09;作为一款专为中小企业设计的云服务产品&#xff0c;提供了简单易用、经济实惠的解决方案&#xff0c;助力企业轻松实现云端部署&#xff0c;赋能…

植物明星大乱斗15

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 player.hplayer.cppparticle.hparticle.cpp player.h #pragma once #include <graphics.h> #include "vector2.h" #include "animation.h" #include "playerID.h" #include &…

爬虫开发工具与环境搭建——使用Postman和浏览器开发者工具

第三节&#xff1a;使用Postman和浏览器开发者工具 在网络爬虫开发过程中&#xff0c;我们经常需要对HTTP请求进行测试、分析和调试。Postman和浏览器开发者工具&#xff08;特别是Network面板和Console面板&#xff09;是两种最常用的工具&#xff0c;能够帮助开发者有效地捕…

【操作系统】每日 3 题(二十九)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…

JSON.stringify的应用说明

前言 JSON.stringify() 方法将 JavaScript 对象转换为字符串,在日常开发中较常用&#xff0c;但JSON.stringify其实有三个参数&#xff0c;后两个参数&#xff0c;使用较少&#xff0c;今天来介绍一下后两个参数的使用场景和示例。 语法及参数说明 JSON.stringify()&#xf…

1.1 如何优化程序性能:cpu和内存的占用上;

1.1 如何优化程序性能&#xff1a;cpu和内存的占用上&#xff1b; 这是两个最大的本地优化策略&#xff1b; 当然&#xff0c;网络程序还需要优化与网络相关的&#xff0c;比如IO loop方式&#xff0c;带宽占用等&#xff1b; 比如&#xff0c;mysql插入性能低&#xff0c;那么…