其他分享
首页 > 其他分享> > LeetCode刷题17-转骰子

LeetCode刷题17-转骰子

作者:互联网

  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