1. 程式人生 > >給定一個字串只含有數字,判定這個字串能表達的所有IP地址

給定一個字串只含有數字,判定這個字串能表達的所有IP地址

本題源自LeetCode

-------------------------------------------------------------------

用三重迴圈遍歷字串,每個段的長度不能超過三,

java程式碼:

   public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> result=new ArrayList<String>();
        int len=s.length();
        
        for(int i=1;i<4&&i<len-2;i++){
            for(int j=i+1;j<i+4&&j<len-1;j++){
                for(int k=j+1;k<j+4&&k<len;k++){
                    if(len-k>=4)      //判斷字串 是否有剩餘
                        continue;
                    int a=Integer.parseInt(s.substring(0,i));
                    int b=Integer.parseInt(s.substring(i,j));
                    int c=Integer.parseInt(s.substring(j,k));
                    int d=Integer.parseInt(s.substring(k));
                    
                    if(a>255||b>255||c>255||d>255)
                        continue;
                    String ip=a+"."+b+"."+c+"."+d;
                    if(ip.length()<len+3)
                        continue;
                    result.add(ip);
                }
            }
        }
        return result;
    }

C++程式碼 :
    vector<string> restoreIpAddresses(string s) {
        vector<string> result;
        string t;                           //存每次子串的結果
        DFS(t,s,result,0);
        return result;
    }
    void DFS(string t,string s,vector<string>& result,int count){
        if(count==3&&isValid(s)){
            result.push_back(t+s);
            return;
        }
        for(int i=1;i<4&&i<s.size();i++){
            string sub=s.substr(0,i);   //取子串
            if(isValid(sub)){
                DFS(t+sub+".",s.substr(i),result,count+1);
            }
        }
    }
    bool isValid(string s){
        stringstream ss;
        int num;
        ss<<s;
        ss>>num;
        if(s.size()>1){   //如果數字長度大於1 ,則首位不能是0;
            return s[0]!='0'&&num>=0&&num<256;
        }
        return num>=0&&num,256;
    }


相關推薦

給定一個字串含有數字判定這個字串表達所有IP地址

本題源自LeetCode ------------------------------------------------------------------- 用三重迴圈遍歷字串,每個段的長度不能超過三, java程式碼: public ArrayList<S

3. Project Euler15 給定一個20*20的方格從左上角到右下角的路徑有多少條?(允許向右和向下走)

【微--策--略】 1. 五個洞排成一排,其中一個洞裡藏有一隻狐狸。每個夜晚,狐狸都會跳到一個相鄰的洞裡;每個白天,你都只允許檢查其中一個洞。怎樣才能保證狐狸最終會被抓住? 解答:有個問題 錯了 下面是少一天的推理 第一天2洞 第二天2洞 都沒有的話 證明它在後三個裡面 第三天4洞 第四天4

演算法題004 -- [給定一個整數的陣列nums返回相加為target的兩個數字的索引值] by java

題目 給定一個整數的陣列nums,返回相加為target的兩個數字的索引值。 假設每次輸入都只有一個答案,並且不會使用同一個元素兩次。 舉例: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums

給定一個非負整數 num反覆將各個位上的數字相加直到結果為一位數

示例: 輸入: 38 輸出: 2 解釋: 各位相加的過程為:3 + 8 = 11, 1 + 1 = 2。 由於2是一位數,所以返回 2。 進階: 你可以不使用迴圈或者遞迴,且在 O(1) 時間複雜度內解決這個問題嗎?   class Solution {  

編寫一個函式實現atoi()函式即把字串數字轉變為數字

#include<iostream> #include<ctype.h> #include <math.h> using namespace std; int l

js裡判斷一個字串全為數字js裡刪除數字中的元素

1、js裡用正則表示式判斷一個字串是否全為數字: if(/^\d+$/.test(temp)){ alert(temp + "全為數字."); } 2、js裡刪除陣列中第i個元素(存在此元素): var testArray = test.split(",");

0059 給定一些值和一個要組成的數字求總的組合數(遍歷解答樹)

如:有1分,2分,5分,10分四種硬幣,每種硬幣無限,給定Target分錢,求多少種組合可以合成Target分錢? // ShangJi.cpp : 定義控制檯應用程式的入口點。 #include

LeetCode58 給定一個僅包含大小寫字母和空格 ' ' 的字串返回其最後一個單詞的長度。 如果不存在最後一個單詞請返回 0 。 說明:一個單詞是指由字母組成但不包含任何空格的字串

給定一個僅包含大小寫字母和空格 ’ ’ 的字串,返回其最後一個單詞的長度。 如果不存在最後一個單詞,請返回 0 。 說明:一個單詞是指由字母組成,但不包含任何空格的字串。 class Solution { public: int lengthO

劍指offer系列(十五)和為S的連續正數序列和為s的兩個數字左旋轉字串

和為S的連續正數序列 題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現

給定一個升序排列的陣列去掉重複的數並輸出新的陣列的長度。

給定一個升序排列的陣列,去掉重複的數,並輸出新的陣列的長度。 例如:陣列 A={1,1,2},你的程式應該輸出 2 即新陣列的長度,新陣列為 {1,2}。 要求:不能新開陣列分配額外的空間,即常數空間限制。 輸入格式 輸入一個整數 n(1≤n≤1000)。 接下來一行

在右側我們給出了一個已經基本完成的程式讀入了一個字串呼叫了一個叫str_len的函式來計算這個字串的長度並輸出。 聰明的你應該已經發現了這個叫str_len的函式並沒有完成

在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成,在不修改函式原型的情況下,請完成str_len函式,實現我們上述的功能吧。 樣例輸入 複製 abc

一個足夠大的數字刪去k個數字後得到最小值

直接上程式碼了 /** * 刪除整數的k個數字,獲得刪除後的最小值 * @param num 目標整數(用String做引數是因為考慮到num的值足夠大) * @param k 刪除數量 * @return */ public

python: 輸出 1~100 之間不被 7 整除的數每行輸出 10 個數字要求應用字串格式化方法美化輸出格式。

#輸出 1~100 之間不能被 7 整除的數 j = 0    #for i in range(1,101):    # 遍歷1-100取值,定義為變數 i      if i%7 != 0: &n

含有012的陣列的排序(java實現)

要求對只含有0,1,2的陣列進行排序,時間複雜度為O(n),空間複雜度為1 秋招筆試題 /*思路: * 設定三個標記指標:iZero, iOne, iTwo * 令iZero從前往後遍歷,指向第一個

輸入任意一個字串判斷這個字串是否是迴文迴文示例: 上海自來水來自海上

2.輸入任意一個字串,判斷這個字串是否是迴文 迴文示例: 上海自來水來自海上 ABCCBA 12321 迴文是指中心對稱的文字 #方法1 str = input('請輸入一個字串:') count = 0 lenth = len(str) print('lenth',

數字字元)字串轉int陣列

1,舉例 字元字串轉成int陣列,存入int陣列,並進行遍歷。 Scanner input=new Scanner(System.in); System.out.println(“請輸入只含有大小寫的字串”); String string=input.next(

\b切字串 保留數字、字母

USE tempdb GO IF OBJECT_ID('t') IS NOT NULL DROP TABLE t GO CREATE TABLE t( id VARCHAR(50) PRIMARY K

\b切字串 保留數字、字母

USE tempdb GO IF OBJECT_ID('t') IS NOT NULL DROP TABLE t GO CREATE TABLE t( id VARCHAR(50) PRIMARY KEY, uname NVARCHAR(20) ) GO INSERT INTO t VAL

Java指定長度隨機生成的字串這個字串必須包含大小寫字母和數字

public static String gen(int length) {  char[] ss = new char[length];  int i=0; while(i<length) {     int f = (int) (Math.random()*3);

寫入一個方法輸入一個檔名和一個字串統計這個字串這個檔案中出現的次數。

public class Test1 { /* * * 寫一個方法,輸入一個檔名和一個字串,統計這個字串在這個檔案中出現的次數。 * */ public static void main