282. Expression Add Operators及變種

詳細(xì)講解:https://www.youtube.com/watch?v=v05R1OIIg08
自己的理解:

image.png

中間for那里注意一下,從i = pos開始,那么我們的t就從num.substring(pos, pos + 1)一直到num.substring(pos, nums.length) 所以我們的i就是從pos到nums.length - 1, substring的尾部取的是i + 1. 注意這里要判斷t是不是以0開始并且長度大于1,如果是就非法,直接break 出來;同時要考慮pos==0的特殊情況,因為此時我們沒有operator, 我們自動默認(rèn)賦加號。這個時候我們在此基礎(chǔ)上繼續(xù)dfs,要把把exp變?yōu)閯倓傋x出來的數(shù),prev, curt都更新為這個,只有pos要變成i+1.
其他情況我們繼續(xù)搜索,更新prev, curt, exp, pos變成i + 1.

class Solution {
    public List<String> addOperators(String num, int target) {
        List<String> res = new ArrayList<>();
        if (num == null || num.length() == 0){
            return res;
        }
        StringBuilder sb = new StringBuilder();
        dfs(num, target, 0, sb, 0, 0, res);
        return res;
    }
    
    //prev : last node val
    //curt : curt exp val
    private void dfs(String num, int target, int pos, StringBuilder exp, long prev, long curt, List<String> res){
        if (pos == num.length()){
            if (curt == target){
                res.add(exp.toString());
                return;
            }
        }
        for (int i = pos; i < num.length(); i++){
            //t = s.substring(pos, pos + 1) to t = s.substring(pos, nums.length)
            String t = num.substring(pos, i + 1);
            if (t.length() > 1 && t.charAt(0) == '0'){//0X  00 05
                break;
            }
            long n = Long.parseLong(t);
            int len = exp.length();
            if (pos == 0){// no operator yet
                //t = s.substring(0, i + 1) 下一個從s.charAt(i + 1)開始處理 pos = i + 1
                //123 要處理1 12 123三種情況,所以要continue不能break
                dfs(num, target, i + 1, exp.append(t), n, n, res);
                exp.setLength(len);
                continue;
            }
            dfs(num, target, i + 1, exp.append("+").append(t), n, curt + n, res);
            exp.setLength(len);
            dfs(num, target, i + 1, exp.append("-").append(t), -n, curt - n, res);
            exp.setLength(len);
            dfs(num, target, i + 1, exp.append("*").append(t), prev * n, curt - prev + prev * n, res);
            exp.setLength(len);
        }
    }
}

變種是給一個字符串,全部由數(shù)字組成,再給一個int target,要求在字符串里插入+或者-,使字符串的表達(dá)式值剛好等于target,返回number of solutions。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,899評論 0 33
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,674評論 0 4
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,541評論 0 13
  • 國慶節(jié)終于實現(xiàn)了女兒的愿望,全家自駕去泰安方特游玩,我們一路在導(dǎo)航的引領(lǐng)下,聽著音樂,迎著秋風(fēng),欣賞著高速兩旁飛速...
    沐源工作室閱讀 694評論 7 5
  • 啦啦啦
    慕槿宸閱讀 260評論 0 0

友情鏈接更多精彩內(nèi)容