ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode刷题17-转骰子

2022-08-07 13:32:52  阅读:151  来源: 互联网

标签:set dice 17 get int str 翻转 LeetCode 刷题


  1 package com.example.demo.leetcode.case202208;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Scanner;
  6 import java.util.stream.Collectors;
  7 
  8 /**
  9  * 功能描述
 10  *
 11  * @author ASUS
 12  * @version 1.0
 13  * @Date 2022/8/6
 14  */
 15 public class Main2022080604 {
 16 
 17     /*
 18     题目:转骰子
 19     【转骰子】骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上,
 20     可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),
 21     可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示顺时针旋转90度),
 22     现从123456这个初始状态开始,根据输入的动作序列,计算得到最终的状态。骰子的初始状态和初始状态转动后的状态如图所示
 23 
 24 
 25     输入描述: 输入一行,为只包含LRFBAC的字母序列,最大长度为50,字母可重复
 26     输出描述: 输出最终状态
 27 
 28     示例1:
 29     输入
 30     L R
 31     输出
 32     1 2 3 4 5 6
 33 
 34     示例2:
 35     输入
 36     L B
 37     输出
 38     5 6 1 2 3 4
 39     */
 40 
 41     // 骰子的状态
 42     private static List<Integer> dice = new ArrayList<>();
 43 
 44     // 初始化状态
 45     static {
 46         for (int i = 1; i <= 6; i++) {
 47             dice.add(i);
 48         }
 49     }
 50 
 51     public static void main(String[] args) {
 52         // 获取输入的操作信息
 53         Scanner scanner = new Scanner(System.in);
 54         String[] operations = scanner.nextLine().split(" ");
 55         for (int i = 0; i < operations.length; i++) {
 56             // 逐个操作处理
 57             operate(operations[i]);
 58         }
 59         // 打印
 60         System.out.print(dice.stream()
 61                 .map(integer -> String.valueOf(integer))
 62                 .collect(Collectors.joining(" "))
 63         );
 64     }
 65 
 66     public static void operate(String str) {
 67 
 68         // 六种情况 l r f b a c
 69         // 对于左右翻转 前后的数字状态是不变的
 70         if (str.equalsIgnoreCase("L") || str.equalsIgnoreCase("R")) {
 71             // 用L表示向左翻转1次
 72             int left = dice.get(0);
 73             int right = dice.get(1);
 74             int up = dice.get(4);
 75             int down = dice.get(5);
 76             // 初始集合下标代表含义0-左,1-右,2-前(观察者方向),3-后,4-上,5-下
 77             if (str.equalsIgnoreCase("L")) {
 78                 dice.set(0, up);
 79                 dice.set(1, down);
 80                 dice.set(4, right);
 81                 dice.set(5, left);
 82             } else {
 83                 dice.set(0, down);
 84                 dice.set(1, up);
 85                 dice.set(4, left);
 86                 dice.set(5, right);
 87             }
 88         }
 89 
 90         // 对于前后翻转 左右的数字状态是不变的
 91         if (str.equalsIgnoreCase("F") || str.equalsIgnoreCase("B")) {
 92             // 用F表示向前翻转1次
 93             int forward = dice.get(2);
 94             int back = dice.get(3);
 95             int up = dice.get(4);
 96             int down = dice.get(5);
 97             // 初始集合下标代表含义0-左,1-右,2-前(观察者方向),3-后,4-上,5-下
 98             if (str.equalsIgnoreCase("F")) {
 99                 dice.set(2, up);
100                 dice.set(3, down);
101                 dice.set(4, back);
102                 dice.set(5, forward);
103             } else {
104                 dice.set(2, down);
105                 dice.set(3, up);
106                 dice.set(4, forward);
107                 dice.set(5, back);
108             }
109         }
110 
111         // 对于顺时针、逆时针翻转 上下的数字状态是不变的
112         if (str.equalsIgnoreCase("A") || str.equalsIgnoreCase("C")) {
113             // 用A表示逆时针旋转90度
114             int left = dice.get(0);
115             int right = dice.get(1);
116             int forward = dice.get(2);
117             int back = dice.get(3);
118             // 初始集合下标代表含义0-左,1-右,2-前(观察者方向),3-后,4-上,5-下
119             if (str.equalsIgnoreCase("A")) {
120                 dice.set(0, back);
121                 dice.set(1, forward);
122                 dice.set(2, left);
123                 dice.set(3, right);
124             } else {
125                 dice.set(0, forward);
126                 dice.set(1, back);
127                 dice.set(2, right);
128                 dice.set(3, left);
129             }
130         }
131     }
132 }

 

标签:set,dice,17,get,int,str,翻转,LeetCode,刷题
来源: https://www.cnblogs.com/chch213/p/16558920.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有