lintcode 題目記錄3

来源:http://www.cnblogs.com/onegarden/archive/2017/06/14/7006947.html
-Advertisement-
Play Games

Expression Expand 字元串展開問題,按照[]前的數字展開字元串,主要是維護兩個棧一個是展開個數棧一個是展開內容棧,內容棧添加[用來判斷是否把要展開的內容全部推出,然後要註意數字可能不止一位其他就無所謂了 ...


Expression Expand  Word Break II Partition Equal Subset Sum

 Expression Expand 

字元串展開問題,按照[]前的數字展開字元串,主要是維護兩個棧一個是展開個數棧一個是展開內容棧,內容棧添加[用來判斷是否把要展開的內容全部推出,然後要註意數字可能不止一位其他就無所謂了

class Solution:
    # @param {string} s  an expression includes numbers, letters and brackets
    # @return {string} a string
    def expressionExpand(self, s):
        # Write your code here
        nl=[]
        sl=[]
        sc=''
        res=''
        lstr=''
        for i in s:
            if i.isdigit():
                if not lstr.isdigit():
                    sl.append(sc)
                    sc=''
                sc = sc + i
            else:
                if i=='[':
                    nl.append(int(sc))
                    sc = ''
                    sl.append('[')
                elif i==']':
                    n=nl.pop()
                    while len(sl)>0:
                        k=sl.pop()
                        if k== '[':break
                        sc = k+ sc
                    ts=''
                    for j in range(n):ts= ts + sc
                    sc=''
                    if len(nl) > 0:sl.append(ts)
                    else:
                        res = res + ts
                else:
                    if len(nl)>0:
                        sc = sc + i
                    else:
                        res = res + i
            lstr=i
        return res

 Word Break II  

單詞切分問題,在數組重從開頭的字元串開始查找,找到了就加入棧,然後每次迴圈pop  判斷pop出的字元串是否完整,完整加入結果,不完整找後續,能找到後續加入棧,沒有繼續下一次迴圈,這裡又一定歧義,wordDict裡邊的字元串是否可以重覆使用的問題?

這玩意當字元串很長後邊的字典數組很多的時候會很慢,暫時沒想到什麼優化的演算法,lintcode給的測試數據裡邊好像沒有這種情況只有一個特殊情況,所以前邊加了一個過濾算是通過了,還有要註意python的startwith函數 

如果參數是''總是返回True略坑爹····

class Solution:
    # @param {string} s a string
    # @param {set[str]} wordDict a set of words
    def wordBreak(self, s, wordDict):
        # Write your code here
        head=[]
        ss=''
        for i in s:
            if ss=='':
                ss=i
            else:
                if i not in ss:
                    ss = ss + i

        for i in ss:
            flag=False
            for di in wordDict:
                if i in di:
                    flag=True
                    break;
            if not flag:
                return []
        for di in wordDict:
            if di !='' and  s.startswith(di):
                head.append(di)
        if len(head)<1:return []
        cur=s
        res=[]
        while len(head)>0:
            h=head.pop()
            le=len(h.replace(' ',''))
            cur=s[le:]
            if cur == '': 
                res.append(h)
                continue
            for di in wordDict:
                if cur.startswith(di):
                    head.append(h+' '+di)
                    
        return res

 

Partition Equal Subset Sum

數組分組求和問題,題目說條件很多 數字都是整數不超過100 數組長度不超過200,就是讓用動態規劃來做,就是背包問題的簡化版,先求所有數字的和,為偶數才能分成兩組,否則直接返回false,然後除以2求最終要分組的和,這個值就類似背包問題的容量,數組中的數字就類似要裝進背包的東西,不同於背包問題的是背包問題要遍歷到最後一個格子,這裡只有又格子值與這個和相等就行了,不一定要遍歷到最後一個格子

class Solution:
    # @param {int[]} nums a non-empty array only positive integers
    # @return {boolean} return true if can partition or false
    def canPartition(self, nums):
        # Write your code here
        sum=0
        for n in nums:
            sum = sum +n
        if sum%2!=0:return False
        k=sum//2
        a=[None]*len(nums)
        for i in range(len(nums)):
            a[i]=[0]*k
            
        for i in range(len(nums)):
            for j in range(k):
                if i == 0:
                    a[i][j] = nums[i] if nums[i] < j+1 else 0
                else:
                    if nums[i]> j+1:
                        a[i][j]=a[i-1][j]
                    else:
                        a[i][j]=max(nums[i]+a[i-1][j+1-nums[i]],a[i-1][j])
                        
                if a[i][j] ==k:return True
        return False
            
        

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C#編譯器對靜態類進行瞭如下限制: 1,靜態類必須直接從基類System.Obect派生,從其他任何基類派生都沒有意義。繼承只適用於對象,而你不能創建靜態類的實例 2,靜態類不能實現任何介面,這是因為只有適用類的實例時,才可調用介面方法 3,靜態類只能定義靜態成員(欄位,方法,屬性和事件),任何實例 ...
  • 前面總結了反射的使用,這一篇結合一個完整的項目來總結下反射的實際應用。 項目結構 如下圖: 定義插件介面 在項目ConsoleApplication6.IService中,定義了兩個介面,Run代表行駛,Trun代表轉向,如下代碼: 插件程式實現 這裡新建了兩個項目分別實現插件程式,分別是Conso ...
  • 裝箱: 值類型比引用類型“輕”,原因是他們不作為對象在托管堆中分配,不被垃圾回收,也不通過指針進行引用。但是許多時候都需要獲取值類型的引用,例如,假定要創建ArrayList對象來容納一組point結構,代碼如下: public sealed class Program { public stati ...
  • 經過我三篇文章的解惑,webapi我相信大家沒有問題了! 先創建了一個UserModel 然後添加Web API Controller 註冊路由 在Global中註冊 這個時候用地址欄訪問地址:api/user/getadmin 這個時侯預設返回的是XML數據模型。 使用AJAX請求這個api,指定 ...
  • 由於公司的工作安排,一直在研究其他技術,所以一直沒時間更新博客,今天終於可以停下手頭的事情,寫一些新內容了。 應用場景:企業門戶網站會根據內容不同,設置不同的板塊,如新浪有體育,娛樂頻道,等等。有的情況下需要給不同的板塊設置不同的二級功能變數名稱,如新浪體育sports.sina.com.cn。 在asp. ...
  • 大學畢業已三年,菜鳥稱謂依然。畢業前使用過六個月的MVC,但是自從畢業後因為公司一直在用webForm,所以MVC就沒有再用過。直到最近打算用MVC做一個項目管理系統,才發現MVC已經變得陌生了,只有再從新學起。為了防止自己的拖延症拖延自己的學習計劃,特在博客園寫此文。學習期間,所有的感悟和整理的可 ...
  • 這個項目深刻的為我們講解了pc客戶端如何請求webapi 相信大家在看了我轉載的第一篇文章和這篇文章之後,對webapi再也不會懼怕了! 討論webapi的知識,歡迎加我微信 jkxx123321 交流 WCF的野心造成了它的龐大複雜,HTTP的單純造就了它的簡單優美。為了實現分散式Web應用,我們 ...
  • 使用Composition API實現Pivot中多個頁吸頂。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...