zoukankan      html  css  js  c++  java
  • LeetCode 657. Judge Route Circle

    problem:

     Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.
    
    The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R (Right), L (Left), U (Up) and D (down). The output should be true or false representing whether the robot makes a circle.
    
    Example 1:
    
    Input: "UD"
    Output: true
    
    Example 2:
    
    Input: "LL"
    Output: false

    first:

    import java.util.Stack;

    class Solution {
        public boolean judgeCircle(String moves) {
            Stack<Character> stack = new Stack<Character>();
            for(int i=0;i<moves.length();i++){
                if(stack.size()==0){
                    stack.push(moves.charAt(i));
                } else if(stack.peek()=='U'&&moves.charAt(i)=='D'||
                          stack.peek()=='D'&&moves.charAt(i)=='U'||
                          stack.peek()=='L'&&moves.charAt(i)=='R'||
                          stack.peek()=='R'&&moves.charAt(i)=='L'){
                    stack.pop();
                } else {
                    stack.push(moves.charAt(i));
                }
            }
            
            return stack.empty() ? true : false;
        }
    }

     result:

    Submission Result: Wrong Answer 

     

    Input: "RLUURDDDLU"
    Output: false
    Expected: true

    2:

    import java.util.Stack;
    
    class Solution {
        public boolean judgeCircle(String moves) {
            int rCounts=0, lCounts=0,dCounts=0,uCounts=0;
            for(int i=0;i<moves.length();i++){
                if(moves.charAt(i)=='U'){
                    uCounts++;
                }
                if(moves.charAt(i)=='D'){
                    dCounts++;
                }
                if(moves.charAt(i)=='R'){
                    rCounts++;
                }
                if(moves.charAt(i)=='L'){
                    lCounts++;
                }
            }
            
            return uCounts==dCounts&&rCounts==lCounts ? true : false;
        }
    }

    result:

    参考答案:

    class Solution {
        public boolean judgeCircle(String moves) {
            int x = 0, y = 0;
            for (char move: moves.toCharArray()) {
                if (move == 'U') y--;
                else if (move == 'D') y++;
                else if (move == 'L') x--;
                else if (move == 'R') x++;
            }
            return x == 0 && y == 0;
        }
    }

    result:

    retry:

    class Solution {
        public boolean judgeCircle(String moves) {
            int rCounts=0, lCounts=0,dCounts=0,uCounts=0;
            char[] charArray = moves.toCharArray();
            for(int i=0;i<charArray.length;i++){
                if(charArray[i]=='U'){
                    uCounts++;
                }
                if(charArray[i]=='D'){
                    dCounts++;
                }
                if(charArray[i]=='R'){
                    rCounts++;
                }
                if(charArray[i]=='L'){
                    lCounts++;
                }
            }
            
            return uCounts==dCounts&&rCounts==lCounts ? true : false;
        }
    }

    result:

    conclusion:

    可见把String转换成char数组后效率更高。

  • 相关阅读:
    全民学python(01)
    如何从标准输入读入数据(2) -- c++语言
    如何从标准输入读入数据(1) -- java语言
    测试markdown格式
    java入门(6)--面向对象初探
    java入门(5)--数组
    java入门(4)--流程控制
    java入门(3)--函数
    java入门(2)--数据类型
    java入门(1)--介绍
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8945438.html
Copyright © 2011-2022 走看看