這是悅樂(lè)書的第305次更新窍仰,第324篇原創(chuàng)
01 看題和準(zhǔn)備
今天介紹的是LeetCode算法題中Easy級(jí)別的第173題(順位題號(hào)是728)怎抛。自分割數(shù)是一個(gè)可被其包含的每個(gè)數(shù)字整除的數(shù)字藏畅。例如店读,128是自分割數(shù)映胁,因?yàn)?28%1 == 0,128%2 == 0驻民,128%8 == 0绽左。此外悼嫉,不允許自分割數(shù)包含數(shù)字零。給定數(shù)字的下限和上限拼窥,輸出每個(gè)可能的自分割數(shù)的數(shù)組戏蔑,如果可能蹋凝,包括邊界。例如:
輸入:left = 1总棵,right = 22
輸出:[1,2,3,4,5,6,7,8,9,11,12,15,22]
注意:每個(gè)輸入?yún)?shù)的邊界是1 <= left <= right <= 10000鳍寂。
本次解題使用的開發(fā)工具是eclipse,jdk使用的版本是1.8情龄,環(huán)境是win7 64位系統(tǒng)迄汛,使用Java語(yǔ)言編寫和測(cè)試。
02 第一種解法
此題要求找出給定范圍內(nèi)所有符合要求的自分割數(shù)骤视,直接將題目意思翻譯過(guò)來(lái)就行鞍爱,單獨(dú)寫了一個(gè)判斷是否是自分割數(shù)的判斷方法。
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list = new ArrayList<Integer>();
for (int i=left; i<=right; i++) {
if (isSelfDividing(i)) {
list.add(i);
}
}
return list;
}
public boolean isSelfDividing(int num){
char[] arr = (num+"").toCharArray();
for (char ch : arr) {
if (ch == '0' || num%(ch-'0') != 0) {
return false;
}
}
return true;
}
03 第二種解法
我們也可以直接在一個(gè)方法里面完成尚胞,第一種解法是轉(zhuǎn)成字符數(shù)組來(lái)判斷硬霍,此解法是利用取余和整除結(jié)合來(lái)取每一位數(shù)。
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list = new ArrayList<Integer>();
for (int i=left; i<=right; i++) {
int num = 0;
for (num=i; num>0; num/=10) {
if (num%10 == 0 || i%(num%10) != 0) {
break;
}
}
if (num == 0) {
list.add(i);
}
}
return list;
}
04 小結(jié)
算法專題目前已日更超過(guò)五個(gè)月笼裳,算法題文章173+篇,公眾號(hào)對(duì)話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】粱玲、【算法】躬柬、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集抽减。
以上就是全部?jī)?nèi)容允青,如果大家有什么好的解法思路、建議或者其他問(wèn)題卵沉,可以下方留言交流颠锉,點(diǎn)贊、留言史汗、轉(zhuǎn)發(fā)就是對(duì)我最大的回報(bào)和支持琼掠!