示例 1:
輸入:20示例 2:輸出:1
解釋:具有至少 1 位重複數字的正數(<= 20)只有 11 。
輸入:100示例 3:輸出:10
解釋:具有至少 1 位重複數字的正數(<= 100)有 11,22,33,44,55,66,77,88,99 和 100 。
輸入:1000輸出:262
數字dp可以解決,不知道怎麼寫。
考慮一種通解的方法:原答案即n-沒有重複的數字。關鍵是求沒有重複的數字
對於位數比n小的情況,我們可以直接排列組合求。
對於與n相同的情況,我們從最高位根據數字的限制(limit)依此排列求解
int c(int m,intn)
return
res;
}int numdupdigitsatmostn(int
n)
if(contain[a[i]]>0
)
break
; contain[a[i]]++;
}return n-res;
}
數字dp
int dfs(int t, bool up, bool ze, bool rp, intmask)
ret += dfs(t - 1, up & (i == i), ze & (i == 0
), nrp, nmas);
}if (!up) dp[t][ze][rp][mask] =ret;
return
ret;
}int numdupdigitsatmostn(int
n)
return dfs(n - 1, 1, 1, 0, 0
);
}
1012 至少有 1 位重複的數字 hard
給定正整數 n,返回小於等於 n 且具有至少 1 位重複數字的正整數的個數。示例 1 輸入 20 輸出 1 解釋 具有至少 1 位重複數字的正數 20 只有 11 轉化為求都不重複的正整數的個數 例如高位是0 4th 3th 2th 1th total 0 0 0 1 9 9xa 9,0 0 0 1...
至少有 K 個重複字元的最長子串
原題指路 至少有 k 個重複字元的最長子串 給你乙個字串s和乙個整數k,請你找出s中的最長子串,要求該子串中的每一字元出現次數都不少於k。返回這一子串的長度。這道題有別於一般的 滑動視窗 的題目,因為這道題視窗的維護條件需要人為新增一項,即視窗中的字元種類數。雖然這看起來很複雜,但是由於這題的資料範...
395 至少有 K 個重複字元的最長子串
給你乙個字串 s 和乙個整數 k 請你找出 s 中的最長子串,要求該子串中的每一字元出現次數都不少於 k 返回這一子串的長度。示例 1 輸入 s aaabb k 3 輸出 3 解釋 最長子串為 aaa 其中 a 重複了 3 次。示例 2 輸入 s ababbc k 2 輸出 5 解釋 最長子串為 a...