问题描述
小M有一个二进制字符串 s,以及一个正整数 n。小M想知道,对于 [1, n] 范围内的每个整数,其二进制表示是否都是字符串 s 的某个子字符串。一个子字符串是字符串中的连续字符序列。
如果 s 包含 [1, n] 范围内每个整数的二进制表示,返回 true,否则返回 false。
测试样例
样例1:
输入:
s = "0110",n = 3
输出:True
样例2:
输入:
s = "1001",n = 4
输出:False
样例3:
输入:
s = "1100101",n = 6
输出:True
代码部分 public class Main { public static boolean solution(String s, int n) { for (int i = 1; i <= n; i++) { // 将整数 i 转换为二进制字符串 String binaryRepresentation = Integer.toBinaryString(i); // 检查 s 是否包含 binaryRepresentation if (!s.contains(binaryRepresentation)) { return false; // 如果不包含,则返回 false } } return true; // 如果所有二进制表示都被包含,则返回 true }
public static void main(String[] args) {
System.out.println(solution("0110", 3) == true ? 1 : 0);
System.out.println(solution("1001", 4) == false ? 1 : 0);
System.out.println(solution("1100101", 6) == true ? 1 : 0);
}
} 题解: 题目要求我们检查一个给定的二进制字符串 s 是否包含从 1 到 n 的每个整数的二进制表示。我们可以通过以下步骤来解决这个问题: 理解题意:我们需要检查每个整数从 1 到 n 的二进制表示是否都是字符串 s 的子字符串。 遍历整数:使用一个循环从 1 遍历到 n。 二进制转换:对于每个整数 i,使用 Integer.toBinaryString(i) 方法将其转换为二进制字符串。 子字符串检查:使用 String.contains() 方法检查字符串 s 是否包含当前的二进制字符串。 结果判断:如果对于任意 i,其对应的二进制字符串不是 s 的子字符串,则立即返回 false。如果循环完成且所有二进制字符串都是 s 的子字符串,则返回 true。 测试:在 main 方法中,我们提供了三个测试案例来验证我们的解决方案是否正确。 下面是详细的步骤解释: 步骤 1:我们首先理解题目要求,明确我们需要检查的是从 1 到 n 的每个整数的二进制表示。 步骤 2:我们使用一个 for 循环来遍历从 1 到 n 的每个整数。 步骤 3:在循环内部,我们使用 Integer.toBinaryString(i) 方法将整数 i 转换为二进制字符串。 步骤 4:我们使用 String.contains() 方法来检查字符串 s 是否包含当前的二进制字符串。 步骤 5:如果 s 不包含某个整数的二进制表示,则函数返回 false。如果循环完成,且所有二进制表示都被 s 包含,则函数返回 true。 步骤 6:在 main 方法中,我们通过三个测试案例来验证我们的 solution 方法是否按预期工作。每个测试案例都调用了 solution 方法,并根据返回值打印出 1 或 0。 通过以上步骤,我们可以确保我们的解决方案是正确的,并且能够处理给定的测试案例。