1.给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成;
如果可以返回true,否则返回false;
magazine中的每个字符只能在ransomNote中使用一次
// 比较好理解
public static boolean canConstruct(String ransomNote ,String magazine){
String str = "abcdefghijklmnopqrstuvwxyz";
char[] strarr = str.toCharArray();
if (ransomNote.length()>magazine.length()){
return false;
}
char[] mag = magazine.toCharArray();
char[] ran = ransomNote.toCharArray();
int countMag = 0;
int countRan = 0;
for (int i = 0;i< strarr.length;i++){
for(int l=0;l
if(mag[l]==strarr[i])
countMag++;
}
for(int j=0;j
if(ran[j]==strarr[i])
countRan++;
}
if(countMag
return false;
}
}
return true;
}
另一种解法是我在网上看到的,我在代码里写了注释cnt[c-'a']++的用法。
public static boolean canConstruct(String ransomNote ,String magazine){
//字符串magazine="baa";
if(ransomNote.length() > magazine.length()) {
return false;
}
int[] cnt = new int[26]; //cnt=[0,0,0,`````,0] 26个零
for(char c : magazine.toCharArray()) {//[b,a,a]
cnt[c - 'a'] ++;
//第一次循环c=b时,cnt[1]++ 结果[0,1,0,`````,0],第二次循环c=a时,cnt[0]++ 结果[1,1,0,`````,0],
//第三次循环c=a时cnt[0]++ 结果[2,1,0,`````,0]
}
for(char c : ransomNote.toCharArray()) {
cnt[c - 'a'] --;
if(cnt[c - 'a'] < 0) {
return false;
}
}
return true;
2.设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。(如果没有“或者其他运算符“这个条件 可以return负负得正)
public static int add(int a,int b ){
while (b != 0) {
int num = a ^ b;
int carry = (a & b) << 1;
a = num;
b = carry;
}
return a;
}
3.Fizz Buzz
游戏规则如下:从1开始往上数数,当遇到3的倍数的时候,说fizz,
当遇到5的倍数,说buzz,当遇到15的倍数,就说fizzbuzz,其他情况则正常数数
public static List fizzBuzz(int n ){
List list = new ArrayList<>();
for (int i = 1;i<=n;i++){
list.add(String.valueOf(i));
if (i%3==0){
list.remove(i-1);
list.add("Fizz");
}
if (i%5==0){
list.remove(i-1);
list.add("Buzz");
}
if (i%15==0){
list.remove(i-1);
list.add("FizzBuzz");
}
}
return list;
}
4.二维数组题
输入 输出
1 2 3 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9
int arr[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
for(int i =0;i< arr.length-1;i++){//0,1,2
for (int l =1;l
int x = arr[l][i];//1.0
arr[l][i] = arr[i][l];
arr[i][l] = x;
}
}
for(int i =0;i< arr.length;i++){
for (int l =0;l
System.out.print(arr[i][l]);
}
System.out.println();
}
5.计算数组的动态和;例:array = {1,2,3,4}; 输出{1,3,6,10};解析:[1,1+2,1+2+3,1+2+3+4]
public static void main (String[] args){
//计算数组的动态和
//公式 runningSum[i] = sum[nums[0]....nums[i]]
int[] nums = {1,2,3,4};
int[] sum = runningSum(nums);
for (int i :sum){
System.out.println(i);
}
}
public static int[] runningSum(int[] nums){
for (int i = 1;i<= nums.length-1;i++){
nums[i] += nums[i-1];
}
return nums;
}
6.给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。
但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案
public static void main(String[] args){
int[] arr ={1,3,4,2};
for (int i :twoSum(arr,6)){
System.out.println(i);
}
}
public static int[] twoSum(int[] nums,int target){
boolean f = false;
int[] arr = new int[2];
for (int i =0;i< nums.length;i++){
if (f==false){
for (int l = i+1;l< nums.length;l++){
if (nums[i]+nums[l]==target){
arr[0]=i;
arr[1]=l;
f = true;
}
}
}
}
return arr;
}
7.回文数;给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
public static boolean isPalindrome(int x){
String str = String.valueOf(x);
String[] arrstr = str.split("");
for (int i = 0;i
if (!arrstr[i].equals(arrstr[arrstr.length-i-1])){
return false;
}
}
return true;
}
//数学解法
public static boolean isPalindrome(int x){
if (x<0){
return false;
}
int i = 0;
int num = x;
while (num != 0){
i = i * 10+ num % 10;
num /= 10;
}
return i == x;
}
8.给定两个字符串 s 和 t ,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。
public static char findTheDifference(String s,String t){
String st = s+t;
String[] str = st.split("");
String[] arr = new String[st.length()];
Random random = new Random();
for (int i = 0;i< str.length;i++){
int x = random.nextInt(str.length);
arr[i] = str[x];
for (int l = 0;l< i;l++){
if (arr[l]==arr[i]){
i--;
break;
}
}
}
char a =' ';
for (int i = 0 ;i< arr.length;i++){
if (t.equals(arr[i])){
a = t.charAt(0);
}
}
return a;
//第二种解法
if (s.length()==0||" ".equals(s)){
return t.charAt(0);
}
int[] cnt = new int[26];
for (char c : s.toCharArray()){
cnt[ c - 'a']++;
}
for (char c : t.toCharArray()){
cnt[ c - 'a']--;
if (cnt [ c - 'a']<0){
return c;
}
}
return ' ';
}