字符串题(2021-6-22)

本文介绍了Java中的三个实用编程技巧:如何将字符串转换为整数,处理字符串中的空格替换,以及实现字符串的排列组合。通过实例展示了字符串转整数的方法,使用ASCII编码判断并处理负号,以及递归算法实现字符串排列的逻辑。

1.把字符串转换成整数

public class Solution{
   public int StrToInt(String str){
     if(str==null||str.length()==0) return 0;
     int mark=0;
     int number=0;//用int来存储,以防止越界
     if(str.charAt(0)=='-')  mark=1;//charAt:返回指定索引处(0)的字符为-,则mark=1
     for(int i=mark;i<str.length();i++){//遍历字符串
       if(str.charAt(i)=='+'){//如果索引处的字符等于+,则继续遍历
       continue;
       }
       if(str.charAt(i)<48||str.charAt(i)>57){
       return 0;//数字不在0-9范围内,则返回0

       }
       number=number*10+str.charAt(i)-48;
     }

    return mark=0?number:-number;//mark等于0,返回number;mark=1,返回一个-number
   }
}

思路:一般把字符串转换成整数,用ASCII,048,957
1.如果字符串为空,长度为0,返回02.定义mark=0,number=0;
3.如果数字的0索引处为-,则返回 mark=1;
4.遍历字符串,第一种情况:如果0索引处为+,则继续遍历
5.第二种情况:字符串的数字都是0-9的范围内,否则返回0
6.mark=0就输出当前的数;mark=-1就输出负数;
ASCII转换成数字的公式:number=number*10+str.charAt(i)-48;

2.替换空格

import java.util.*;
public class Solution{
   public String replaceSpace(){
     if(s==null||s.length()==0)  return s;
     return s.replaceAll(" ","%20");
 }
}
思路:
1.如果字符串为空或者字符串的长度为0,则返回字符串.
2.用replaceAll方法,将空格替换成%20.

3.字符串排列

import java.util.ArrayList;
public class Solution{
   public ArrayList<String> Permutation(String str){
   ArrayList<String> result=new ArrayList<>();
   if(str==null||str.length()==0){
   return result;
    }
    recur(str,"",result);
    return result;
   }
   public void recur(String str,String cur,ArrayList<String> result){
   if(str.length()==0){
      if(!result.contains(cur)){
      result.add(cur);
      }
   }
   for(int i=0;i<str.length();i++){
   recur(str.substring(0,i)+str.substring(i+1,str.length()),cur+str.charAt(i),result);
   }
  }
}
思路:
1.创建一个list集合,用来存放String类型数据
2.如果字符串为空或者长度为0,则返回结果。
3.调用recur方法,将结果存入list集合中。
4.编写recur方法,将原来的字符串、排序好的字符串、和存入集合的字符串都传入。
5.如果字符串的长度为0,list集合中不包含cur,就将排序好的字符串添加进list集合中。
6.遍历字符串,将结果的字符串排序好。
2021年CSP(中国计算机学会非专业级软件能力认证)初赛试及答案解析涵盖了多个知识点,包括但不限于面向对象程序设计语言、时间复杂度、字符串处理、算法分析等。以下是部分试及其答案解析的示例: ### 面向对象程序设计语言 以下不属于面向对象程序设计语言的是( )。 - A. C++ - B. Python - C. Java - D. C 答案:D. C 解析:C语言是一种过程化语言,而C++、Python和Java均支持面向对象编程特性,如类、继承、多态等[^1]。 ### 时间复杂度分析 当输入为`Y2NmIDIwMjE=Y2NmIDIwMjE=`时,输出的第二行为( )。 - A. 正确 - B. 错误 答案:A. 正确 解析:此考查了字符串编码解码以及时间复杂度的理解。通过对输入字符串进行Base64解码,可以得到原始字符串“ccf2021”,因此输出为正确[^2]。 ### 二分查找与算法分析 目解析:通读程序后发现目在有二分`binary_search`,因此是在找什么东西。观察64,65行,推断这里的循环是在枚举任意两点`i`,`j`,也就是枚举任意两点作为矩形对角线上的两点,再寻找另外一条对角线上的两点是否存在。 解析:此涉及二分查找算法的应用,以及如何通过枚举点对来判断是否存在特定几何结构(如矩形)。二分查找的时间复杂度通常为`O(log n)`,而枚举点对的时间复杂度则取决于具体实现[^3]。 ### 排列组合问 10、B 排列组合 `C_6^2 × C_4^2 × C_2^2 / A_3^3 = 90 / 6 = 15` 解析:此考查排列组合的基本公式及其应用。通过计算不同组合方式并考虑重复排列的影响,最终得出结果为15[^4]。 ### 示例代码 以下是一个简单的Python代码示例,用于演示如何计算排列组合问: ```python from math import comb # 计算组合数 C(n, k) def combination(n, k): return comb(n, k) # 计算排列数 A(n, k) def permutation(n, k): result = 1 for i in range(k): result *= (n - i) return result # 示例计算 c62 = combination(6, 2) c42 = combination(4, 2) c22 = combination(2, 2) a33 = permutation(3, 3) result = (c62 * c42 * c22) / a33 print(result) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值