public class Main {
public static void main
(String[] args
) { System.
out.
println(countNumbersContainingDigitDFrom1ToN
(234,
5)); }
static long countNumbersContainingDigitDFrom1ToN
(long Number,
int digit
) { if (Number >= digit
&& digit
> 0) return 1; //if d==0 we will not count this return 0;
}
long prefixNumber
= Number / 10; long con = countNumbersContainingDigitDFrom1ToN(prefixNumber - 1, digit);
long count = con * 10 + (prefixNumber - con);//count numbers containing digit from 0 to MaximumNumberLesserThanGivenNumber
if (new Long(prefixNumber
).
toString().
contains(digit
+ "")) { count
+= Number % 10 + 1;//each number from MaximumNumberLesserThanGivenNumber to Number contains this } else if (Number % 10 >= digit
) { count++;//only one number from MaximumNumberLesserThanNumber to Number contains this
}
//as we count number from zero (if d==0 we have to decrease counter)
if (digit == 0) return --count;
return count;
}
}
CnB1YmxpYyBjbGFzcyBNYWluIHsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnROdW1iZXJzQ29udGFpbmluZ0RpZ2l0REZyb20xVG9OKDIzNCw1KSk7Cgl9CglzdGF0aWMgbG9uZyBjb3VudE51bWJlcnNDb250YWluaW5nRGlnaXRERnJvbTFUb04obG9uZyBOdW1iZXIsIGludCBkaWdpdCkgewoJCWlmIChOdW1iZXIgPD0gOSkgewoJCQlpZiAoTnVtYmVyID49IGRpZ2l0ICYmIGRpZ2l0ID4gMCkgcmV0dXJuIDE7IC8vaWYgZD09MCB3ZSB3aWxsIG5vdCBjb3VudCB0aGlzCgkJCXJldHVybiAwOwoJCX0KCQlsb25nIHByZWZpeE51bWJlciA9IE51bWJlciAvIDEwOwoJCWxvbmcgY29uID0gY291bnROdW1iZXJzQ29udGFpbmluZ0RpZ2l0REZyb20xVG9OKHByZWZpeE51bWJlciAtIDEsIGRpZ2l0KTsgCgkJbG9uZyBjb3VudCA9IGNvbiAqIDEwICsgKHByZWZpeE51bWJlciAtIGNvbik7Ly9jb3VudCBudW1iZXJzIGNvbnRhaW5pbmcgZGlnaXQgZnJvbSAwIHRvIE1heGltdW1OdW1iZXJMZXNzZXJUaGFuR2l2ZW5OdW1iZXIKCQlpZiAobmV3IExvbmcocHJlZml4TnVtYmVyKS50b1N0cmluZygpLmNvbnRhaW5zKGRpZ2l0ICsgIiIpKSB7CgkJCWNvdW50ICs9IE51bWJlciAlIDEwICsgMTsvL2VhY2ggbnVtYmVyIGZyb20gTWF4aW11bU51bWJlckxlc3NlclRoYW5HaXZlbk51bWJlciB0byBOdW1iZXIgY29udGFpbnMgdGhpcwoJCX0gZWxzZSBpZiAoTnVtYmVyICUgMTAgPj0gZGlnaXQpIHsKCQkJY291bnQrKzsvL29ubHkgb25lIG51bWJlciBmcm9tIE1heGltdW1OdW1iZXJMZXNzZXJUaGFuTnVtYmVyIHRvIE51bWJlciBjb250YWlucyB0aGlzCgkJfQoJCS8vYXMgd2UgY291bnQgbnVtYmVyIGZyb20gemVybyAoaWYgZD09MCB3ZSBoYXZlIHRvIGRlY3JlYXNlIGNvdW50ZXIpCgkJaWYgKGRpZ2l0ID09IDApIHJldHVybiAtLWNvdW50OwoJCXJldHVybiBjb3VudDsKCX0KfQ==