200. 島嶼數(shù)量/221. 最大正方形/93. 復(fù)原IP地址

200. 島嶼數(shù)量

  • 相關(guān)標(biāo)簽: BFS DFS 并查集
// 這題就是個(gè) 圖染色的問題 dfs 遞歸寫吧 


void dfs(char **grid, int gridSize, int* gridColSize, int i, int j, int **visited)
{
    if (i < 0 || i >=gridSize || j < 0 || j >=  *gridColSize || visited[i][j] == 1 || grid[i][j] != '1') {
        return;
    }
    // 1. 標(biāo)記為 visited 
    if (visited[i][j] == 0) {
        visited[i][j] = 1;
    }
    
    dfs(grid, gridSize, gridColSize, i - 1, j, visited);
    
    dfs(grid, gridSize, gridColSize, i + 1, j, visited);
    
    dfs(grid, gridSize, gridColSize, i, j - 1, visited);
    
    dfs(grid, gridSize, gridColSize, i, j + 1, visited);
    
    return ;
    
}

int numIslands(char** grid, int gridSize, int* gridColSize){
    if (grid == NULL || gridSize == 0 || gridColSize == NULL || *gridColSize == 0) {
        return 0;
    }

    int **visited = (int **)malloc(sizeof(int *) * gridSize);
    for (int i = 0; i < gridSize; i++) {
        visited[i] = (int *)malloc(sizeof(int) * (*gridColSize));
        memset(visited[i], 0, sizeof(int) * (*gridColSize));
    }

    int landNum = 0; 
    for (int i = 0; i < gridSize; i++) {
        for (int j =0; j < *gridColSize; j++) {
            if (grid[i][j] == '1' && visited[i][j] == 0) { //遍歷數(shù)據(jù) 遇到1 就進(jìn)去染色
                dfs(grid, gridSize, gridColSize, i, j, visited);
                landNum++;
            }
        }
    } 
    
//     for (int i = 0; i < gridSize; i++) {
//         for (int j =0; j < *gridColSize; j++) { 
//             printf("%d -", visited[i][j]);

//         } 
//         printf("\n");
//     }

    for (int i = 0; i < gridSize; i++) {
        free(visited[i]);
    }
    free(visited);
    return landNum;
}


221. 最大正方形

  • 相關(guān)標(biāo)簽 : 動(dòng)態(tài)規(guī)劃

/*
思路: 


1. 暴力 

for (i...m) 
    for (j...n)
        i,j 為 左上的 所有 邊長(zhǎng)的情況 

eg : 
0,0 為 i酸茴,j 
    00-11, 00-22, 00-33 每次都要遍歷 n*n  
    
    有很多重疊的地方 重復(fù)遍歷 
    
    有可能是DP 
    
DP : DP[i][j] 表示什么分预? 表示 從0,0 到 i,j 的 最大正方形 的 最大邊長(zhǎng) 

dp[i][j] = if 當(dāng)前 是 0  , 那么 00 - ij 就不可能是正方形 薪捍, 最大邊長(zhǎng)為0  dp[i][j] == 0
            else : 看一下 上面 左邊 和左上 最小的邊長(zhǎng)  笼痹, 加上自身的 1  得到 當(dāng)前的最大邊長(zhǎng)

*/



int lMin(int a, int b, int c) {
    int temp  = (a < b) ? a : b;
    return temp < c ? temp : c;
}


int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){
    if( matrix == NULL || matrixSize ==0 || matrixColSize == NULL || *matrixColSize == 0) {
        return 0;
    }
    
    int **dp = (int **)malloc(sizeof(int *) * (matrixSize + 1));
    for (int i = 0; i < matrixSize + 1; i++) {
        dp[i] = (int *)malloc(sizeof(int) * (*matrixColSize + 1));
        memset(dp[i], 0, sizeof(int) * (*matrixColSize + 1));
    }
        
    int res = 0;
    
    for (int i = 0; i < matrixSize; i++) {
        for (int j =0; j < *matrixColSize; j++) {
            dp[i + 1][j + 1] =  (matrix[i][j] == '0') ? 0 : (lMin(dp[i][j], dp[i+1][j], dp[i][j+1]) + 1);
            if (dp[i + 1][j + 1] > res) {
                res = dp[i + 1][j + 1];
            }
        }
    }
    

    
    for (int i = 0; i < matrixSize + 1; i++) {
        free(dp[i]);
    }
    free(dp);
    return res * res;

}


93. 復(fù)原IP地址

  • 相關(guān)標(biāo)簽 : 字符串配喳, 回溯算法
#define BUFLEN 10000
#define STRLEN 100
void helper(char **resArr, char *s, char *curIp, int curIdx, int index, int remain, int *returnSize)
{
    if (remain == 0) {
        if (index == strlen(s)) {
            resArr[*returnSize] = (char *)malloc(STRLEN);
            memset(resArr[*returnSize], 0 , STRLEN);
            memcpy(resArr[*returnSize], curIp, STRLEN);
            (*returnSize)++;
        }
        return;
    }
    int curVal = 0;
    char subStr[4] = {0};
    for (int i = 1; i <= 3; i++) {
        memcpy(subStr, s + index, i);
        // 首位為0 , 只可能是0 
        if (subStr[0] == '0' && i > 1) {
            continue;
        }
        curVal = strtol(subStr, (char **)NULL, 10);
        if (curVal >= 0 && curVal <= 255) {
            if (remain == 1) {
                sprintf(curIp + curIdx, "%d", curVal);
            } else {
                sprintf(curIp + curIdx, "%d.", curVal);
            }
            helper(resArr, s, curIp, curIdx + strlen(subStr) + 1, index + i, remain - 1, returnSize);
        }
    }
    return;
}
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
char ** restoreIpAddresses(char * s, int* returnSize){
    *returnSize = 0;
    if (s == NULL || strlen(s) < 4) {
        return NULL;
    }
    char **resArr = (char **)malloc(sizeof(char *) * BUFLEN);
    if (resArr == NULL) {
        return NULL;
    }
    memset(resArr, 0, sizeof(char *) * BUFLEN);

    char *curIp = (char *)malloc(STRLEN);
    if (curIp == NULL) {
        return NULL;
    }
    memset(curIp, 0, STRLEN);
    
    helper(resArr, s, curIp, 0, 0, 4, returnSize);
    
    free(curIp);
    printf("%d\n", *returnSize);
    return resArr;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凳干,一起剝皮案震驚了整個(gè)濱河市晴裹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌救赐,老刑警劉巖涧团,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異经磅,居然都是意外死亡少欺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門馋贤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赞别,“玉大人,你說我怎么就攤上這事配乓》绿希” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵犹芹,是天一觀的道長(zhǎng)崎页。 經(jīng)常有香客問我,道長(zhǎng)腰埂,這世上最難降的妖魔是什么飒焦? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮屿笼,結(jié)果婚禮上牺荠,老公的妹妹穿的比我還像新娘。我一直安慰自己驴一,他們只是感情好休雌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肝断,像睡著了一般杈曲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胸懈,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天担扑,我揣著相機(jī)與錄音,去河邊找鬼趣钱。 笑死涌献,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羔挡。 我是一名探鬼主播洁奈,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼间唉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绞灼!你這毒婦竟也來了利术?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤低矮,失蹤者是張志新(化名)和其女友劉穎印叁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體军掂,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轮蜕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝗锥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跃洛。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖终议,靈堂內(nèi)的尸體忽然破棺而出汇竭,到底是詐尸還是另有隱情,我是刑警寧澤穴张,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布细燎,位于F島的核電站,受9級(jí)特大地震影響皂甘,放射性物質(zhì)發(fā)生泄漏玻驻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一偿枕、第九天 我趴在偏房一處隱蔽的房頂上張望璧瞬。 院中可真熱鬧,春花似錦渐夸、人聲如沸彪蓬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽档冬。三九已至,卻和暖如春桃纯,著一層夾襖步出監(jiān)牢的瞬間酷誓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工态坦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盐数,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓伞梯,卻偏偏與公主長(zhǎng)得像玫氢,于是被迫代替她去往敵國(guó)和親帚屉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容