摘要:所組成的最小單位,可以看作一對括號。從左往右看,作為決定一組完整最小單位的符號。每次找到一對就可以按分為左右兩個子問題遞歸解決。從右往左看,作為決定最小單位的符號,每次遇到一個,就拆解離最近的兩個小單位。宏觀上看是,從小到大。
Given a string representing arbitrarily nested ternary expressions, calculate the result of the expression. You can always assume that the given expression is valid and only consists of digits 0-9, ?, :, T and F. #1 Input: "F?1:T?4:5" Output: "4" Explanation: The conditional expressions group right-to-left. Using parenthesis, it is read/evaluated as: "(F ? 1 : (T ? 4 : 5))" "(F ? 1 : (T ? 4 : 5))" -> "(F ? 1 : 4)" or -> "(T ? 4 : 5)" -> "4" -> "4" #2 Input: "T?T?F:5:3" Output: "F" Explanation: The conditional expressions group right-to-left. Using parenthesis, it is read/evaluated as: "(T ? (T ? F : 5) : 3)" "(T ? (T ? F : 5) : 3)" -> "(T ? F : 3)" or -> "(T ? F : 5)" -> "F" -> "F"
? : 所組成的最小單位,可以看作一對括號。 ?類似(, :類似 )。
從左往右看,:作為決定一組完整最小單位的符號。每次找到一對就可以按:分為左右兩個子問題遞歸解決。
宏觀上看是從大到小拆開,從小到大遞歸回去。
public class Solution { public String parseTernary(String expression) { if(expression == null || expression.length() == 0){ return expression; } char[] exp = expression.toCharArray(); return DFS(exp, 0, exp.length - 1) + ""; } public char DFS(char[] c, int start, int end){ if(start == end){ return c[start]; } int count = 0, i =start; for(; i <= end; i++){ if(c[i] == "?"){ count ++; }else if (c[i] == ":"){ count --; if(count == 0){ break; } } } return c[start] == "T"? DFS(c, start + 2, i - 1) : DFS(c, i+1,end); } }
從右往左看,? 作為決定最小單位的符號,每次遇到一個?, 就拆解離?最近的兩個小單位。宏觀上看是,從小到大。
public class Solution { public String parseTernary(String expression) { if(expression == null || expression.length() == 0) return ""; Dequestk = new LinkedList<>(); for(int i=expression.length()-1; i >= 0; i--){ char c = expression.charAt(i); if(!stk.isEmpty() && stk.peek() == "?"){ stk.pop(); // pop ? char first = stk.pop(); stk.pop(); // pop : char second = stk.pop(); if(c == "T") stk.push(first); else stk.push(second); } else { stk.push(c); } } return String.valueOf(stk.peek()); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66938.html
摘要:原文地址今天我發現了三元運算符的一個小小的用法這給我干涸的大腦一點樂趣三元運算符是對參數賦值時候的一個簡潔的主要用法一個主要的用法三元運算符能夠讓你在一行代碼中描述判定代碼從而替換掉類似以下的代碼使用以下代碼替代第二個代碼例子是非常簡潔的用 原文地址 Even shorter ternary operators in PHP using ?: 今天我發現了PHP三元運算符的一個小小的用...
摘要:負責讀取和記錄當前代碼的位置,并把讀取到的代碼交給處理,其意義在于,當傳遞給的代碼需要進行判讀猜測時,能夠記錄當前讀取的位置,并在接下來的操作匯總回滾到之前的讀取位置,也能在發生語法錯誤時,準確指出錯誤發生在代碼段的第幾行第幾個字符。 上一篇(《如何編寫簡單的parser(基礎篇)》)中介紹了編寫一個parser所需具備的基礎知識,接下來,我們要動手實踐一個簡單的parser,既然是簡...
摘要:對于布爾值類型,如果至少有一個節點與表達式匹配,則求值結果返回,否則返回如果有節點匹配,則返回和方法以上輸出與語法匹配的節點數量默認類型結果常量可以自動確定返回結果的類型。 XPath是設計用來在DOM文檔中查找節點的一種手段,因而對XML的處理也很重要。很多瀏覽器實現了這個標準,IE有自己的實現方式。 DOM3級XPath 下面的代碼是用來檢測瀏覽器是否支持DOM3級的XPath: ...
摘要:對于布爾值類型,如果至少有一個節點與表達式匹配,則求值結果返回,否則返回如果有節點匹配,則返回和方法以上輸出與語法匹配的節點數量默認類型結果常量可以自動確定返回結果的類型。 XPath是設計用來在DOM文檔中查找節點的一種手段,因而對XML的處理也很重要。很多瀏覽器實現了這個標準,IE有自己的實現方式。 DOM3級XPath 下面的代碼是用來檢測瀏覽器是否支持DOM3級的XPath: ...
閱讀 623·2023-04-26 01:53
閱讀 2749·2021-11-17 17:00
閱讀 2880·2021-09-04 16:40
閱讀 1983·2021-09-02 15:41
閱讀 830·2019-08-26 11:34
閱讀 1222·2019-08-26 10:16
閱讀 1335·2019-08-23 17:51
閱讀 815·2019-08-23 16:50