【发布时间】:2019-12-08 21:15:31
【问题描述】:
代码是将十进制数转换为二进制,生成二进制字符串所有可能的子串,并计算每个子串中0和1的奇数个,最后返回总计数。运行此代码会在hackerrank 等网站中出现超时错误。应该使用什么方法来降低这里的复杂性?我尝试将所有二进制数推入一个数组,然后分别对其进行迭代以避免0(n ^ 3)。但即使这样似乎也行不通。这里应该采用动态规划方法吗?
function getAllSubstrings(str) {
let result = [];
let n = str.length
let oddZeroCnt = 0;
let oddOneCnt = 0;
for (let i = 0; i < n; i++)
for (let j = i + 1; j <= n; j++) {
let substr = str.substring(i, j);
let zeroSubStr = (substr.split("0").length - 1)
let oneSubStr = (substr.split("1").length - 1)
if (zeroSubStr % 2 === 1) {
oddZeroCnt++
}
if (oneSubStr % 2 === 1) {
oddOneCnt++
}
}
return oddZeroCnt + " " + oddOneCnt;
}
function getOddCounts(decNum) {
return getAllSubstrings((decNum >> BigInt(0)).toString(2))
}
let input = BigInt(17)
console.log(getOddCounts(input))
【问题讨论】:
标签: javascript string binary substring bit