0
点赞
收藏
分享

微信扫一扫

【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作


学习指引

  • ​​序、专栏前言​​
  • ​​一、【例题1】​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​1、方法1​​
  • ​​2、方法2​​
  • ​​3、方法3​​
  • ​​4 、代码解析​​
  • ​​二、【例题2】​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​4 、代码解析​​
  • ​​三、推荐专栏​​
  • ​​四、课后习题​​

序、专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习​​Java​​​,特别是一些​​Java学习者​​难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
   但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
   算法的学习肯定不能缺少总结,​​将学过的知识进行打卡,以此来进行巩固以及复习。
  学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。

一、【例题1】

  给定多组测试数据,每次给定一个字符串【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_java,对你把它进行翻转后输出。

2、解题思路

  题目难度:⭐️

  首先要清楚,在​​Java​​​语言中,默认的字符串类似​​String​​​是不可变的。所以我们考虑把它转化为字符数组​​char[]​​​进行操作,或者使用可变的字符串类型​​StringBuilder​​进行操作。

3、模板代码

1、方法1

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
char[] c=sc.next().toCharArray();
int l=0;
int r=c.length-1;
while (l<r){
char a=c[l];
c[l]=c[r];
c[r]=a;
l++;
r--;
}
String s=new String(c);
System.out.println(s);
}
}
}

2、方法2

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String s=sc.next();
int n=s.length();
StringBuilder sb=new StringBuilder();
for (int i = n-1; i >=0; i--) {
sb.append(s.charAt(i));
}
System.out.println(sb);
}
}
}

3、方法3

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String s=sc.next();
StringBuilder sb=new StringBuilder(s);
sb.reverse();
System.out.println(sb);
}
}
}

4 、代码解析

  • 【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_算法_02方法【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_学习_03中,我们将字符串转化字符数组​​​char[]​​​操作,使用​​双指针​​​算法两两交换头尾的字符,最终完成操作。第​​16​​​行代码中​​String​​​有一个构造方法可以传入一个​​char[]​​拼接成字符串,但是这个方式太麻烦不推荐大家使用。
  • 【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_算法_04方法【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_开发语言_05中我们使用一个空的​​​StringBuilder​​​接受答案,只需要把原有的​​String​​​倒着遍历一遍加入到​​StringBuilder​​即可,最后进行输出。
  • 【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_开发语言_06​​​StringBuilder​​​自带有​​reverse​​​翻转函数,它也有一个构造方法可以接收​​String​​​为参数。我们只需要调用​​reverse​​进行翻转即可。这才是我们常使用的方式。

二、【例题2】

  给定多组测试数据,每次给定一个整数 【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_蓝桥杯_07。请你对它进行翻转输出,题目保证翻转的结果不会超出了​​​int​​的取值范围。

2、解题思路

  题目难度:⭐️⭐️

  这道题我们应该注意到负数的情况,因为如果直接转化为字符串使用​​reverse​​​是会出问题的。我们可以考虑通过利用取余​​%​​操作来完成。

3、模板代码

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
int x=sc.nextInt();
int res=0;
while (x!=0){
int b=x%10;
x/=10;
res=res*10+b;
}
System.out.println(res);
}
}
}

4 、代码解析

  • 【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_算法_02我们取余​​​%​​​,是每次取出​​x​​​的最低位数,然后加在​​res​​​的后面,每次要加之前都得先乘以​​10​​,整体向左移动一位再加入,这样得到的整数和原数组就是相反的。
  • 【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_算法_04为什么能解决负数的情况呢?因为负数取模得到的数也会是负数。比如​​-123​​​,取模一次得到的并不是​​3​​​,而是​​-3​​​。然后接着是​​-2​​​和​​-1​​​。
    这样得到的数通过我们的运算得到的是:
    【第11天】给定一个字符串或数字,对它进行翻转输出 | 多样化操作_算法_10
    而​​​-321​​​正好就是​​-123​​​翻转后的结果,如果使用​​reverse​​​得到的结果就会是​​321-​​​。

举报

相关推荐

0 条评论