[Leetcode][第657题][JAVA][机器人能否返回原点][数组][HashMap]
【問題描述】[簡單]
【解答思路】
遍歷方向 看是否回到原點 或者 “上下” “左右”兩個方向的數量是否相等
1. 方向
時間復雜度:O(N) 空間復雜度:O(1)
class Solution {public boolean judgeCircle(String moves) {int x = 0,y= 0;int len = moves.length();if(len == 0){return true;}if(len%2!=0){return false;}char[] a = moves.toCharArray();for(int i=0;i<moves.length();i++){char c=a[i];if(c=='U')x+=1;if(c=='D')x-=1;if(c=='L')y-=1;if(c=='R')y+=1;}return x==0&&y==0;} }2. 數組
時間復雜度:O(N) 空間復雜度:O(N)
class Solution {public boolean judgeCircle(String moves) {int[] res = new int[26];int len = moves.length();if(len == 0){return true;}if(len%2!=0){return false;}char[] c = moves.toCharArray();for(char ch :c){res[ch-'A']++;}return res['U'-'A']==res['D'-'A']&&res['L'-'A']==res['R'-'A'];} }3. HashMap
時間復雜度:O(N) 空間復雜度:O(1)
class Solution {public boolean judgeCircle(String moves) {HashMap<Character,Integer> map = new HashMap<Character,Integer>(); //一定要先放入 不最后判斷可能找不到 因為 可能沒有某個方向 map.put('U', 0);map.put('D', 0);map.put('L', 0);map.put('R', 0);int len = moves.length();if(len == 0){return true;}if(len%2!=0){return false;}char[] c = moves.toCharArray();for(int i =0 ;i<len;i++ ){if(map.containsKey(c[i])){map.put(c[i],map.get(c[i])+1);}}return (map.get('U').equals(map.get('D')))&&(map.get('L').equals(map.get('R')));} }【總結】
1. 反思
沒有想清楚就開始動手 簡單題!!!硬是搞了半天!!!
輸出最后的判斷不一定要遍歷 要學會思考特判
2.hashmap最后判斷equals
值得注意的是最后判斷要用.equals不能用==。
Integer是int的包裝類,雖然能自動拆箱,但是Integer本質上是一個對象,我們==比較的是堆中的地址。
我們看一下jdk中Integer的源碼
默認IntegerCache.low = -127, IntegerCache.high = 128, 所以在這個范圍內比較的是值,如果不在這個范圍內他回去new一個新的Integer對象,這時候比的就是地址了。
參考鏈接:https://leetcode-cn.com/problems/robot-return-to-origin/solution/hen-rong-yi-li-jie-de-liang-chong-jie-ti-si-lu-by-/
參考鏈接:https://leetcode-cn.com/problems/robot-return-to-origin/solution/java-hashmap-by-jolyne-3/
總結
以上是生活随笔為你收集整理的[Leetcode][第657题][JAVA][机器人能否返回原点][数组][HashMap]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MVC】AJAX+PartialVie
- 下一篇: html中车牌号省份简称输入键盘