Thursday, November 15, 2018
902. Numbers At Most N Given Digit Set
对我来说很难的一道题
分两种情况讨论
1. 组成的数的位数少于 N,那么就是 choices的permutation -> digit^choices
2. 组成的数的位数恰好等于N
-> 此时需要从最高位开始比较
如果d小于 N的最高位,那么以d为最高位的所有数都符合,
+(totalDigits - 1)^choices
如果d大于N的最高位,那么以后的所有都不符合了,可以直接return sum
如果d恰好等于N的最高位,那么需要讨论第 2 高位,重复以上的3 steps
难点在于当把 D的 d都看过之后如何判断还要不要往下一位继续看,只有当前位有相等情况时才向下一位继续看
100.00 %
class Solution {
public int atMostNGivenDigitSet(String[] D, int N) {
String x = String.valueOf(N);
int totalDigits = x.length();
int sum = 0;
int choices = D.length;
for (int digits = 1; digits < totalDigits; digits++) {
sum += Math.pow(choices, digits);
}
boolean isPrefix = false;
int i = 0;
for (i = 0; i < x.length(); i++) {
isPrefix = false;
char currDigit = x.charAt(i);
for (String d : D) {
char c = d.charAt(0);
if (c < currDigit) {
sum += Math.pow(choices, totalDigits - i - 1);
} else if (c == currDigit) {
isPrefix = true;
break;
}
}
if (!isPrefix) {
return sum;
}
}
return sum + (isPrefix ? 1 : 0);
}
}
Edge Cases:
["1"] 834
["3","4","8"] 4
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment