蓝桥杯基础篇(java 回文数,两数之和,求众数 ,有效的括号)

public class _3 {

	public static void main(String[] args) {
		//回文数的特点   个位 i%10 十位 i/10%10 百位  i/100%10  千位 i/1000
		int b0,b1,b2,b3;
		for(int i=1000;i<10000;i++) {
			b0 = i%10; //个位
			b1 = i/10%10;
			b2 = i/100%10;
			b3 = i/1000;
			if(b3==0 && b2 !=0) { //三位数
				if(b2 == b0) System.out.println(i);
			}else if(b3 == 0 && b2 == 0) {
				if(b0==b1) System.out.println(i);
			}else if(b3 != 0) {
				if(b3 == b0 && b2 == b1) System.out.println(i);
			}
		}

	}
}

运行结果
1001
1111
1221
1331
1441
1551
1661
1771
1881
1991
2002
2112
2222
2332
2442
2552
2662
2772
2882
2992
3003
3113
3223
3333
3443
3553
3663
3773
3883
3993
4004
4114
4224
4334
4444
4554
4664
4774
4884
4994
5005
5115
5225
5335
5445
5555
5665
5775
5885
5995
6006
6116
6226
6336
6446
6556
6666
6776
6886
6996
7007
7117
7227
7337
7447
7557
7667
7777
7887
7997
8008
8118
8228
8338
8448
8558
8668
8778
8888
8998
9009
9119
9229
9339
9449
9559
9669
9779
9889
9999
public class _3 {

	public static void main(String[] args) {
		//回文数的特点   个位 i%10 十位 i/10%10 百位  i/100%10  千位 i/1000
		int b0,b1,b2,b3;
		for(int i=1000;i<10000;i++) {
			String src = String.valueOf(i);  
			//这个方法是静态的,直接通过String调用,将int类型转换成String类型
			if(src.charAt(0) == src.charAt(src.length()-1) && src.charAt(1) == src.charAt(src.length()-2))
				/*java.lang.String.charAt() 方法返回指定索引处的char值。索引范围是从0到length() - 1。
				对于数组索引,序列的第一个char值是在索引为0,索引1,依此类推。
				*/
				System.out.println(i);	
		}
	}
}

运行结果如上

 

public class _4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=100;i<10000;i++) {
			String src = String.valueOf(i);
			if(isLength(src,src.length()))
				System.out.println(src);
		}
	}
	
	public static boolean isLength(String n,int length) {
		boolean flag = false;
		//String chars =String.valueOf(n);
		char[] chars = n.toCharArray();
		int count = 0;
		for(int i=0;i
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

public int[] twoSum(int[] nums, int target) {
        for(int i=0;i
题目:求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在众数。

示例 1:

输入: [3,2,3]
输出: 3
示例 2:

输入: [2,2,1,1,1,2,2]
输出: 2
取巧思想:有序数组的众数必定会在中间位置出现呢

public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length/2];
    }
题目:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

实例1:
输入: "()[]{}"
输出: true

实例2:
输入: "([)]"
输出: false

实例3:
输入: "{[]}"
输出: true

代码:
public boolean isValid(String s) {
	    char [] m=null;
       char[] stack = new char[1000000]; //栈存储
	    m = s.toCharArray();
	    int j = 0;
	    for(int i=0;i0){
                if(m[i] == '(' || m[i] == '{' || m[i] == '[' ) 
	    		stack[j++] = m[i];
	    	else if(m[i] == ')' && i %2==0 ) {
	    		if(j!=0 && (stack[j-1] != '(' ||m[i-1] != '(')) return false;
	    		else j--;
	    	}else if(m[i] == ']' && i %2==0 ) {
	    		if(j!=0 && (stack[j-1] != '['||m[i-1] != '[')) return false;
	    		else j--;
	    	}else if(m[i] == '}' && i %2==0 ) {
	    		if(j!=0 && (stack[j-1] != '{'|| m[i-1] != '{')) return false;
	    		else j--;
	    	}else if(m[i-1] == '(' && m[i] ==')'
                     || m[i-1] == '[' && m[i] =='}' 
                     || m[i-1] == '{' && m[i] =='}') j--; 
            }
            if(stack[0] == ')' || stack[0] == ']' ||stack[0] == '}' ) return false;
	    }
	    return true;
	}

目前处于报错状态
执行出错信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
	at Solution.isValid(Solution.java:19)
	at __DriverSolution__.__helper__(__Driver__.java:8)
	at __Driver__.main(__Driver__.java:52)
最后执行的输入:
"{}][}}{[))){}{}){(}]))})[({"

官方答案: 哈希法(不懂)

 //hash表负责映射。
    private HashMap mappings;
    //用映射初始化哈希映射。这只会使代码更容易阅读。
    public Solution(){
         this.mappings = new HashMap();
        this.mappings.put(')', '(');
        this.mappings.put('}', '{');
        this.mappings.put(']', '[');
    }
   public boolean isValid(String s) {
	    //初始化算法中使用的堆栈
       Stack stack = new Stack();
       
       for(int i=0;i

时间:2018.11.28

你可能感兴趣的:(蓝桥杯基础练习,算法,java)