当前位置: 首页 > news >正文

做 在线观看免费网站有哪些网站界面设计应该遵循的原则

做 在线观看免费网站有哪些,网站界面设计应该遵循的原则,天元建设集团电话,百度指数下载app题目 一个密码锁由 4 个环形拨轮组成#xff0c;每个拨轮都有 10 个数字#xff1a; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 。每个拨轮可以自由旋转#xff1a;例如把 9 变为 0#xff0c;0 变为 9 。每次旋转都只能旋转一个拨轮的一位数字。 锁的初始数字为 0000 #xff0c;一个…题目 一个密码锁由 4 个环形拨轮组成每个拨轮都有 10 个数字 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 。每个拨轮可以自由旋转例如把 9 变为 00 变为 9 。每次旋转都只能旋转一个拨轮的一位数字。 锁的初始数字为 0000 一个代表四个拨轮的数字的字符串。 列表 deadends 包含了一组死亡数字一旦拨轮的数字和列表里的任何一个元素相同这个锁将会被永久锁定无法再被旋转。 字符串 target 代表可以解锁的数字请给出解锁需要的最小旋转次数如果无论如何不能解锁返回 -1 。 解题 第一步我们不管所有的限制条件不管 deadends 和 target 的限制就思考一个问题如果让你设计一个算法穷举所有可能的密码组合你将怎么做 总共有4个位置每个位置可以向上转也可以向下转也就是有8种可能。比如从 0000 开始转一次可以穷举出 1000 900001000900······共8种密码。然后再以这8种密码作为基础对每种密码再转一下穷举出所有可能······ 仔细想想这就可以抽象成一幅图每个节点有8个相邻的节点求的又是最短距离这不就是典型的BFS嘛这时框架就可以派上用场了先写出一个“简陋”的BFS框架代码 package BFS;import java.util.LinkedList; import java.util.Queue;// leetcode 109 打开转盘锁 public class OpenTheTurntable {public String plusOne(String str, int j) {char[] ch str.toCharArray();if (ch[j] 9) {ch[j] 0;} else {ch[j] 1;}return new String(ch);}public String minusOne(String str, int j) {char[] ch str.toCharArray();if (ch[j] 0) {ch[j] 9;} else {ch[j] - 1;}return new String(ch);}// BFS框架伪码打印所有可能的密码public void BFS(String target) {QueueString queue new LinkedList();queue.offer(0000);while (!queue.isEmpty()) {int sz queue.size();// 将当前队列中的所有节点向周围扩散for (int i 0; i sz; i) {String cur queue.poll();// 判断是否到达终点System.out.println(cur);// 将一个节点的相邻节点加入队列for (int j 0; j 4; j) {String up plusOne(cur, j);String down minusOne(cur, j);queue.offer(up);queue.offer(down);}}// 在这里增加步数}return;}} 注意这段代码当然有很多问题但是我们做算法题肯定不是一蹴而就的而是从简陋到完美的。 这段BFS代码已经能够穷举所有可能的密码组合了但是显然不能完成题目还有如下问题需要解决 1.会走回头路。比如从 0000 拨到 1000但是等从队列中拿出 1000时还会拨出一个 0000这样会产生死循环。 2.没有终止条件按照题目要求找到 target 就应该结束并返回拨动的次数。 3.没有对 deadends的处理按道理这些“死亡密码”是不能出现的也就是说遇到这些密码的时候需要跳过不能进行任何操作。 只要按照BFS框架在对应的位置稍微修改即可修复这些问题 package BFS;import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set;// leetcode 109 打开转盘锁 public class OpenTheTurntable {public String plusOne(String str, int j) {char[] ch str.toCharArray();if (ch[j] 9) {ch[j] 0;} else {ch[j] 1;}return new String(ch);}public String minusOne(String str, int j) {char[] ch str.toCharArray();if (ch[j] 0) {ch[j] 9;} else {ch[j] - 1;}return new String(ch);}int openLock(String[] deadends, String target) {// 记录需要跳过的死亡密码SetString deads new HashSet();for (String s : deadends) {deads.add(s);}// 记录已经穷举过的密码防止走回头路SetString visited new HashSet();QueueString queue new LinkedList();// 从起点开始启动广度优先搜索int step 0;queue.offer(0000);visited.add(0000);while (!queue.isEmpty()) {int sz queue.size();// 将当前队列中的所有节点向周围扩散for (int i 0; i sz; i) {String cur queue.poll();// 判断密码是否合法是否到达终点if (deads.contains(cur)) {continue;}if (cur.equals(target)) {return step;}// 将一个节点的相邻节点加入队列for (int j 0; j 4; j) {String up plusOne(cur, j);if (!visited.contains(up)) {queue.offer(up);visited.add(up);}String down minusOne(cur, j);if (!visited.contains(down)) {queue.offer(down);visited.add(down);}}}// 在这里增加步数step 1;}// 如果穷举完都没有找到目标密码那就是找不到了return -1;}public static void main(String[] args) {OpenTheTurntable openTheTurntable new OpenTheTurntable();String[] deadends {8888};int count openTheTurntable.openLock(deadends, 0008);System.out.println(count);}}至此这道题目就解决了。但优化还没有结束因为终点在哪里是知道的所以可以用双向BFS进行优化。这里先留白以后再补充······
http://www.dnsts.com.cn/news/91618.html

相关文章:

  • 做网站主要学什么软件网站建设公司佛山
  • 建设一个大型网站大概费用地方门户网站建设方案
  • 怎么做招投标网站网站升级维护需要多久
  • 企业网站用什么做产品广告策划方案
  • 尔雅网站开发实战网站制作工具
  • 高密做网站哪家好价位做网站登入见面
  • 沛县网站建设企业专业搜索引擎seo公司
  • 怎样找网站国内时事新闻2021最新
  • 个体户网站备案关于网站开发中网站上传
  • 阜宁网站建设山东建设厅官网
  • 番禺网站建设gzhchl广西建设工会网站
  • 多说评论插件对网站优化信息服务类网站建设方案
  • 去哪接单做网站门户网站如何帮企业做宣传
  • 长沙做旅游网站多少钱网站美工
  • 爱做网站视频阳西网站seo
  • 有什么网站做投标设计营销方案格式
  • 西安营销网站建设涉及部署未备案网站
  • 建设部网站官网建筑施工合同杭州seo公司哪家好
  • 眉山网站建设网站目录怎么做的
  • seo网站设计费用html5网站建设
  • 毕业答辩企业网站开发的问题深圳市网络公司
  • 企业站网站建设制作平台互联网信息服务平台
  • 蓝色网站欣赏网站显示建设中页面
  • 广州17网站一起做网店小男生和大人做的网站
  • 商城网站htmlseo搜索引擎优化案例
  • 地图网站 源码品牌网站建设流程图
  • 中国最厉害的网站建设公司苏州网站制作价格
  • 订单网站模板kloxo网站压缩
  • 假的建设银行网站大庆网页制作公司电话
  • ii6创建网站做淘宝客网站域名是别人的