zoukankan      html  css  js  c++  java
  • Leetcode -- Day 45

    Reverse num/word/bits

    最近回国了 有点懒

    Question 1

    Reverse Integer

    Reverse digits of an integer.

    Example1: x = 123, return 321
    Example2: x = -123, return -321

    Be careful about some interesting cases. i.e.negative number, overflow case.

     1     public int reverse(int x) {
     2         if (x >= -9 && x <= 9){
     3             return x;
     4         }
     5         
     6         boolean isNeg = false;
     7         if (x < 0){
     8             isNeg = true;
     9             x = 0 - x;
    10         }
    11         
    12         double result = 0;
    13         
    14         while(x > 0){
    15             result = result * 10 + x % 10;
    16             x = x / 10;
    17         }
    18         
    19         if (isNeg){
    20             return -result < Integer.MIN_VALUE ? 0 : -(int)result;
    21         }
    22         else{
    23             return result > Integer.MAX_VALUE ? 0 : (int)result;
    24         }
    25

    Question 2

    Reverse Words in a String

    Given an input string, reverse the string word by word.

    For example,
    Given s = "the sky is blue",
    return "blue is sky the".

    I use split to change it an word array, or you can use toCharArray() to change it to char array. 

     1     public String reverseWords(String s) {
     2         StringBuffer result = "";
     3         String[] array = s.split(" ");
     4         for (int i = array.length - 1; i >= 0; i --){
     5             String temp = array[i].trim();
     6             if (temp.equals("") == false){
     7                 if (i != array.length - 1){
     8                     result += " " + temp;
     9                 }
    10                 else{
    11                     result += temp;
    12                 }
    13             }
    14         }
    15         return result.trim();
    16     }

    Question 3

    Reverse Words in a String II
    这里要求in-place,也就是说不需要开辟额外空间

    Reverse all and then deal with space.

     1 public class Solution {
     2     public void reverseWords(char[] s) {
     3         reverse(s, 0, s.length);//reverse the whole char array
     4         //i is the start reverse point, j is the end reverse pont, i's change is
     5         //controlled by j, when j is the space, set i to the character taht next to space, i.e. i+1
     6         for (int i=0, j=0; j<=s.length; j++) {
     7             if (j==s.length || s[j]==' ') {
     8                 reverse(s, i, j);
     9                 i =  j + 1; //j is the space, specify i to j+1, i.e. the character next to space
    10             }
    11         }
    12     }
    13     //begin: indicate the start reversing location
    14     //end-1:last character, end-1-i: i is the distance to end
    15     private void reverse(char [] s, int begin, int end) {
    16         //[!]i<(end-begin)/2
    17         for (int i=0; i<(end-begin)/2; i++) {
    18             char temp = s[begin+i];
    19             s[begin+i] = s[end-i-1];
    20             s[end-i-1] = temp;
    21         }
    22     }
    23 }

    Question 4

    Reverse Bits

    Reverse bits of a given 32 bits unsigned integer.

    For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as00111001011110000010100101000000).

    n & 1 means always get the first digit of n. And put it to reverse's first digit (reversed << 1 menas move all digits to left by 1 bit). 

    1     public int reverseBits(int n) {
    2         int reversed = 0;
    3         for (int i = 0; i < 32; i ++){
    4            reversed = (reversed << 1) | (n & 1);
    5             n = n >> 1; 
    6         }
    7         return reversed;
    8     }
  • 相关阅读:
    POJ 2653 Pick-up sticks [线段相交 迷之暴力]
    POJ1556 The Doors [线段相交 DP]
    POJ 3304 Segments[直线与线段相交]
    POJ2318 TOYS[叉积 二分]
    挖坑
    HDU3488 Tour [有向环覆盖 费用流]
    BZOJ 3438: 小M的作物 [最小割]
    POJ 2125 Destroying The Graph [最小割 打印方案]
    网络流算法与建模总结
    CF266D. BerDonalds [图的绝对中心]
  • 原文地址:https://www.cnblogs.com/timoBlog/p/4735861.html
Copyright © 2011-2022 走看看